mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-09-21 17:38:10 +00:00
上一版 Lua 对齐引入的 sdk.events.subscribe 有两个真问题,本提交修掉: 1) 用了公共 SDK 的 Events(),但本内核从未注入 event subscriber (SetEventSubscriber 全仓无调用点),拿到永远是 nil ⇒ subscribe 只会 返回 "events unavailable"。改用内部 SDK 的 s.Subscribe——内置插件走的就是 这条路径(cli/webui/skillmgr 全用它)。 2) 自死锁:subscribe 会在 Lua 的 plugin.start(sdk) 回调里被调用,而 luaPlugin.Start 正持有 p.mu;原实现在 subscribe 里再 lock p.mu 追加 subs, 不可重入 ⇒ 测试实测 30s 超时。改用独立的 subsMu。 3) use-after-close:Stop 会 Close LState,但事件订阅此前无人取消,残留回调 再触发就会碰已关的 L。现在:Stop 先(不持 p.mu,避免与 Bus.Publish 锁序反转)取 subsMu 取消全部订阅,再置 closed 并关 L;事件回调持 p.mu 后 先查 closed,已进入等锁的旧回调会直接返回。 4) plugin_mgr 访问补 nil 保护(部分单测构造的 SDK 不含 pluginMgr)。 回归:TestLuaEventsSubscribeAndStopCleanup——订阅后 Publish 命中、Stop 后 再 Publish 不 panic。全套 Lua 测试在 -race 下通过。