Skip to content

[code-review] swarm SendToTeammate/GetTeamResults use team pointer after releasing m.mu: TOCTOU vs DeleteTeam/ShutdownTeammate silently drops messages #2788

Description

@topcheer

文件: internal/swarm/manager.go L609-621(SendToTeammate)、L740-747(GetTeamResults)

问题描述
m.mu 下取 team 指针后解锁再操作。与 DeleteTeam/ShutdownTeammate 并发时:消息可投进已被 cancel 的 teammate Inbox,runner 已退出不消费,SendToTeammate 返回 nil 静默成功。对比 ShutdownTeammate 自身(L520-524 在 tm.mu 下同步 cancel+移除)与 #2121 对 SpawnTeammate 的同类修复,修复模式已存在而 Send 路径未用。

触发场景
leader 并发 SendToTeammate(team, tm, msg) 与 DeleteTeam(team):Send 在 L616 解锁后被调度让出;DeleteTeam 完成移除+cancel;Send 恢复后消息投递成功返回 nil,实际无人消费。

修复建议
投递操作纳入 team 生命周期临界区(team.mu 下校验 teammate 存活 + 投递原子化),或对已 cancel 的 teammate inbox 投递返回错误。

严重程度: medium(并发窗口窄,但后果为静默消息丢失 + 假送达)

来源: cron-1 深度审查,初审 sa-133 + 独立复核 sa-134 双重确认

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions