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 {