Skip to content

解除 slkd 事件循环持锁等待 #1

Description

@sanchuanhehe

What to build

让 slkd 的事件接收任务在等待内核事件时不持有 SharedState mutex。

当前事件循环先锁住 AdapterState,再 await next_event。在没有事件时,同一把锁上的所有 D-Bus 方法都可能无限等待,事件接收 Interface 与业务状态 Implementation 被错误耦合。

建议由独立 event receiver 拥有专用订阅 fd 或 Adapter,收到事件后才短暂获取 SharedState 更新状态与发出 D-Bus signal。

Acceptance criteria

  • 任意 await 内核事件的路径都不持有 SharedState 或其他业务状态锁。
  • 控制器静默 30 秒期间,Info、StartDiscovery、Connect 等 D-Bus 方法仍能按各自超时响应。
  • event receiver 有明确的启动、取消、shutdown 与 fd ownership 语义。
  • 收到事件后只在最小临界区更新状态,注册 D-Bus object 等异步操作在锁外完成。
  • 回归测试能稳定复现旧死锁或饥饿,并证明修复后 D-Bus 与事件并发工作。
  • 不以缩短轮询 timeout 掩盖锁问题。

Blocked by

None - can start immediately.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions