diff --git a/msgqueue.go b/msgqueue.go index 0cc0dde..7538918 100644 --- a/msgqueue.go +++ b/msgqueue.go @@ -72,10 +72,13 @@ func (this *msgQueue) FireEvent(msgId int, args q5.Args) { if !h.deleted { h.cb(args) } else { - h.entry.DelInit() + node.delingLock.Lock() + q5.AppendSlice(&node.delingHandlers, h) + node.delingLock.Unlock() } return true }) + this.clearNode(&node.delingLock, &node.delingHandlers) node.addingLock.Lock() defer node.addingLock.Unlock() if !node.addingHead.Empty() { @@ -86,8 +89,21 @@ func (this *msgQueue) FireEvent(msgId int, args q5.Args) { if !h.deleted { node.head.AddTail(&h.entry) h.cb(args) + } else { + node.delingLock.Lock() + q5.AppendSlice(&node.delingHandlers, h) + node.delingLock.Unlock() } return true }) } + this.clearNode(&node.delingLock, &node.delingHandlers) +} + +func (this *msgQueue) clearNode(delingLock *sync.Mutex, delingHandlers *[]*MsgHandler) { + delingLock.Lock() + defer delingLock.Unlock() + if len(*delingHandlers) > 0 { + *delingHandlers = []*MsgHandler{} + } }