Commit Graph
3 Commits
Author SHA1 Message Date
lbl 92463499ef fix(utils): TaskGuard::drop 不再调用 tokio::task::id()
问题:TaskGuard::drop 中调用 tokio::task::id()。abort 路径下
future 的销毁若发生在非任务上下文,id() 直接 panic 刷日志;
若发生在调用方任务上下文,则拿到调用方的任务 id,把它从
任务组中误删,破坏任务组记账。

修复:spawn 时在任务上下文内获取自身 id 存入 TaskGuard,
Drop 只使用保存的 id。

测试:test_abort_task_keeps_caller_bookkeeping 验证在同组任务内
abort 其他任务后,调用方条目不被误删、wait_all_stopped 正常返回。
2026-08-20 23:15:02 +08:00
lbl ca72f2b3d4 修复 Web 状态机在启动中停止时卡死
- 启动任务(含注册重试循环)此前是裸 tokio::spawn,stop 打不断:
  服务器不可达时点击停止,状态永远卡在 Starting 或显示 Running 的死网络。
  现在保存 JoinHandle,stop/restart 时先 abort_start_task 中断它,
  defer 守卫负责把状态迁移到 Stopped
- 清理任务此前 spawn 在自己所等待的 task_group 里,形成自引用等待,
  网络自行停止时永不返回;改为在任务组外等待
- 顺带修复 TaskGroup::wait_all_stopped 的丢失唤醒竞态:
  notified() 先 enable 注册再检查条件
- 补充 Starting 状态停止迁移、任务自然结束唤醒两个测试
2026-08-20 22:21:54 +08:00
lbl b4301a8106 v2 2026-02-10 18:20:39 +08:00