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 {