DOC-FULL-A6 P1 | Session 无超时清理,内存泄漏 #95

Closed
opened 2026-06-07 20:04:18 +08:00 by wangdl · 1 comment
Owner

审查发现

F6: start 创建的 session 永远留在 HashMap 中。iOS crash/被杀后无清理。需加超时清理或在 close 后 remove。

M-DOC-FULL Batch 0 审查 issue。

## 审查发现 F6: start 创建的 session 永远留在 HashMap 中。iOS crash/被杀后无清理。需加超时清理或在 close 后 remove。 M-DOC-FULL Batch 0 审查 issue。
wangdl added this to the M-DOC-FULL:Document Runtime 完整阅读内核与学习事件协议 milestone 2026-06-07 20:04:18 +08:00
Author
Owner

修复完成

问题

F6: start_reading_session_v2 创建的 session 永远留在 HashMap 中。iOS crash/被杀后无清理 → 内存泄漏。

修复

新增 cleanup_stale_sessions_v2(now_ms: i64, max_age_ms: i64) -> u32

  • 遍历所有 session,移除 last_event_at_msnow_ms 超过 max_age_ms 的 session
  • 同时清理对应的 ActiveTimeTracker
  • 不区分状态:Closed 和孤儿 Active/Paused 均清理
  • 返回清理数量

使用方式

iOS App 启动时调用:

let now = Int64(Date().timeIntervalSince1970 * 1000)
let removed = cleanupStaleSessionsFfi(nowMs: now, maxAgeMs: 30 * 60 * 1000) // 30 min

改动

  • session_v2.rs: cleanup_stale_sessions_v2() + 3 测试(stale 清理/孤儿清理/全部近期不清理)
  • lib.rs (FFI): cleanup_stale_sessions_ffi uniffi 导出
  • zx_document.udl: 函数声明

验证

cargo test session_v2 — 14 passed
cargo test --all — 160 passed, 0 failed
## 修复完成 ### 问题 F6: `start_reading_session_v2` 创建的 session 永远留在 HashMap 中。iOS crash/被杀后无清理 → 内存泄漏。 ### 修复 新增 `cleanup_stale_sessions_v2(now_ms: i64, max_age_ms: i64) -> u32`: - 遍历所有 session,移除 `last_event_at_ms` 距 `now_ms` 超过 `max_age_ms` 的 session - 同时清理对应的 ActiveTimeTracker - 不区分状态:Closed 和孤儿 Active/Paused 均清理 - 返回清理数量 ### 使用方式 iOS App 启动时调用: ```swift let now = Int64(Date().timeIntervalSince1970 * 1000) let removed = cleanupStaleSessionsFfi(nowMs: now, maxAgeMs: 30 * 60 * 1000) // 30 min ``` ### 改动 - `session_v2.rs`: `cleanup_stale_sessions_v2()` + 3 测试(stale 清理/孤儿清理/全部近期不清理) - `lib.rs` (FFI): `cleanup_stale_sessions_ffi` uniffi 导出 - `zx_document.udl`: 函数声明 ### 验证 ``` cargo test session_v2 — 14 passed cargo test --all — 160 passed, 0 failed ```
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: wangdl/zhixi-document-runtime#95
No description provided.