mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-10-04 00:03:59 +00:00
fix(stop): 配额须计入停在输入 channel 的待处理消息
实测:停止后排队消息仍逐条跑完。原因是 armStop 只数 sched.queue, 而用户按下停止时调度器正忙于当前任务,其余消息大多还没被 pumpInbox 搬进队列、仍停在 inputCh ⇒ queued=0、配额归零。 - IOManager.PendingInputs():暴露 channel 中待处理条数。 - armStop(pending int):queued = len(s.queue) + pending。 - 补 TestStop_ArmCountsPendingChannelInputs 锁死该口径。
This commit is contained in:
@ -536,6 +536,19 @@ func (m *IOManager) EmitTextTo(target, outputChannel, text string) {
|
||||
func (m *IOManager) InputChan() <-chan *InputEvent { return m.inputCh }
|
||||
func (m *IOManager) OutputChan() <-chan *OutputEvent { return m.outputCh }
|
||||
|
||||
// PendingInputs 返回**尚未被调度器取走**的输入条数(排队队列之外的那一段)。
|
||||
//
|
||||
// 为何需要单独一个口径:输入先进 inputCh,再由 pumpInbox 搬进调度器就绪队列。
|
||||
// “停止”要统计的是“用户按下停止时还没被处理的消息”,而它们大多还躺在
|
||||
// inputCh 里(调度器正忙于处理当前任务)。只数 sched.queue 会得到 0,
|
||||
// 于是短路配额失效——实测就是这个现象:停止后排队消息照旧逐条跑完。
|
||||
func (m *IOManager) PendingInputs() int {
|
||||
if m == nil {
|
||||
return 0
|
||||
}
|
||||
return len(m.inputCh)
|
||||
}
|
||||
|
||||
// RegisterInputChannel 注册一个 inputch(不带插件归属,兼容旧调用)。
|
||||
//
|
||||
// inputch 是**最基本的输入路由单位**;一个插件可以注册多个。
|
||||
|
||||
Reference in New Issue
Block a user