fix(ncm §31): 修两处 UI 数据竞态——返回首页行空白(staging发布) + 进第二个歌单显示上一歌单(换歌单清窗)
A. 返回首页各行 2~3s 空白:appstate_load_playlists 就地 memset(g_st.playlists[]) 与 home_src2 无锁逐行绑定竞态,刷新期间 playlist_count 保留旧值 → UI 读清零行。 照搬 s_build[] staging 范式:网络落 s_pls[] → 成功后锁内原子发布(拷回+更新count), 失败保留旧快照(断网离线浏览)。绝不就地清零 UI 可见数组。 B. 进第二个歌单显示上一歌单:playlist_open/refresh 同步路径不调 appstate_playlist_reset, pl_apply(1) 绑到上一歌单残留窗口(track_ids_count/songs)。 新增窗口归属(歌单 id 唯一标识, 对搜索歌单同样成立): worker 首屏发布后 appstate_playlist_window_set;refresh 目标≠归属(窗口is) → 同步 reset 再 pl_apply。 同歌单手动刷新(id 同)保留旧内容(stale-while-revalidate)。 宿主回归:playlist_race_sim(新 F 并发读无清零态/G 开A→开B 不串)、window/search/ cache_evict/player_flow/stream_sim、test_ncm_core 宿主+mipsel 全 PASS; build_ncm.sh -Wall -Wextra 0 warning;0 真实请求;未部署。
This commit is contained in:
1 parent
97b741cf56
commit
10690bc348
9 files changed
+290
-9
No files matched your search
@@ -167,6 +167,16 @@ int ncm_api_song_url_auto(const char *dev, const char *ck, const char *id, int l
|
||||
return NCM_OK;
|
||||
}
|
||||
|
||||
/* §20.3(HEAD 的降级链工作)把 player_manager 切到 ncm_api_song_url_auto_av;本 sim 只测播放流
|
||||
* 不测档位链语义,故转发到上方 auto 桩(desired→level),0 请求。与本次两处 UI 竞态无关。 */
|
||||
int ncm_api_song_url_auto_av(const char *device_id, const char *cookie, const char *id,
|
||||
int account_vip, int fee, int desired,
|
||||
ncm_play_url_t *out, int *out_level)
|
||||
{
|
||||
(void)account_vip; (void)fee;
|
||||
return ncm_api_song_url_auto(device_id, cookie, id, desired, out, out_level);
|
||||
}
|
||||
|
||||
static int g_dl_fail; /* 阶段3:>0 时下载返回 NCM_ERR_NET(模拟预缓冲前网络失败) */
|
||||
int ncm_http_download_status(const ncm_http_req_t *req, ncm_http_write_cb cb, void *ctx,
|
||||
size_t maxb, ncm_http_resp_t *resp, int *status_out)
|
||||
|
||||
Reference in new issue
Block a user