AskaEth
31879f3302
fix(ncm): 缓存命中改单请求出参,移除全局命中计数(评审 P2-2/P2-1)
问题(P2-2):离线判定用 `ncm_apicache_hits()` 前后差值判「本次是否缓存命中」——
①其它 worker 的命中会污染差值 → 误判「已回在线」;②盘缓存分支的 g_hits++ 在 g_mu 锁外,
跨线程自增/64 位读存在竞争与撕裂可能。
修法(出参方案):
- `api_post_cached(..., int *from_cache)`:命中置 1(未走网络),miss/失败为 0;
四个调用点显式传参。
- 新增 `ncm_api_user_playlist_ex(..., int *out_from_cache)`;out_n 与原接口一致**必填**
(NULL→NCM_ERR_ARG,修入口容忍 NULL、成功路径却无条件解引用的契约不一致,评审 P2-1);
out_from_cache 可 NULL。旧 `ncm_api_user_playlist` 为薄包装(调用方零改动)。
- `appstate_load_playlists_ex` 透传该标志;home_worker 用本次请求的 from_cache 判定是否
回在线;歌单页只在失败时同步离线态(成功可能是缓存命中,不据此清离线)。
- 删除 `ncm_apicache_hits()`/g_hits(无使用者,同时消除数据竞争);盘缓存命中分支两行
合并为一行(行为不变,重构)。
- 测试:session_gate_sim 新增 D2 五例(miss→0 且真网络 +1 次 / 命中→1 且 0 请求 /
失败→0 / 兼容入口不崩 / out_n 必填契约);playlist_race_sim、plpage_sim 补 `_ex` 桩。
验证:session_gate_sim 88 PASS/0 FAIL;test_ncm_core_host 139 PASS/0 FAIL;
http_truncate_sim 13 PASS/0 FAIL;核心 13 TU(-Wall -Wextra)0 warning。
2026-11-05 11:59:33 +08:00
..
2026-09-02 14:30:04 +08:00
2026-09-02 12:48:34 +08:00
2026-09-01 01:17:21 +08:00
2026-08-31 06:03:36 +08:00
2026-08-31 06:03:36 +08:00
2026-08-31 06:03:36 +08:00
2026-08-31 06:03:36 +08:00
2026-09-02 13:51:36 +08:00
2026-09-02 14:30:04 +08:00
2026-09-03 12:16:01 +08:00
2026-09-02 04:20:46 +08:00
2026-08-31 12:50:32 +08:00
2026-08-31 12:50:32 +08:00
2026-08-31 09:00:23 +08:00
2026-08-31 09:00:23 +08:00
2026-08-31 09:00:23 +08:00
2026-08-31 09:00:23 +08:00
2026-11-05 11:54:23 +08:00
2026-11-04 20:02:28 +08:00
2026-09-03 12:16:01 +08:00
2026-09-02 03:43:42 +08:00
2026-09-03 12:16:01 +08:00
2026-08-31 09:00:23 +08:00
2026-08-31 09:00:23 +08:00
2026-09-03 12:16:01 +08:00
2026-08-31 15:42:24 +08:00
2026-11-05 11:45:44 +08:00
2026-11-04 21:11:00 +08:00
2026-11-05 11:59:33 +08:00
2026-11-05 11:59:33 +08:00
2026-08-31 17:40:04 +08:00
2026-08-31 17:40:04 +08:00
2026-08-31 17:40:04 +08:00
2026-09-03 12:16:01 +08:00
2026-11-05 11:45:44 +08:00
2026-11-05 11:59:33 +08:00
2026-09-01 20:00:14 +08:00
2026-09-01 14:44:55 +08:00
2026-08-31 12:50:32 +08:00
2026-08-31 12:50:32 +08:00
2026-11-04 20:02:28 +08:00
2026-11-05 11:45:44 +08:00