allow nil dispatchers to operate correctly
diff --git a/events/event_manager.go b/events/event_manager.go index 6222e04..8a8a2d3 100644 --- a/events/event_manager.go +++ b/events/event_manager.go
@@ -130,6 +130,9 @@ } func (d *dispatcher) Add(h apid.EventHandler) { + if d == nil { + return + } d.Lock() defer d.Unlock() if d.handlers == nil { @@ -145,6 +148,9 @@ } func (d *dispatcher) Remove(h apid.EventHandler) { + if d == nil { + return + } d.Lock() defer d.Unlock() for i := len(d.handlers) - 1; i >= 0; i-- { @@ -157,29 +163,38 @@ } func (d *dispatcher) Close() { + if d == nil { + return + } close(d.channel) } func (d *dispatcher) Send(e apid.Event) bool { - if d != nil { - defer func() { - if err := recover(); err != nil { - log.Warnf("Send %v failed: %v", e, err) - } - }() - d.channel <- e - return true + if d == nil { + return false } - return false + defer func() { + if err := recover(); err != nil { + log.Warnf("Send %v failed: %v", e, err) + } + }() + d.channel <- e + return true } func (d *dispatcher) HasHandlers() bool { + if d == nil { + return false + } d.Lock() defer d.Unlock() return d != nil && len(d.handlers) > 0 } func (d *dispatcher) startDelivery() { + if d == nil { + return + } go func() { for { select {