add lock to emitwithcallback (due to merge conflicts), address comments
diff --git a/apid.go b/apid.go index 4392b8f..6e49337 100644 --- a/apid.go +++ b/apid.go
@@ -9,7 +9,7 @@ const ( SystemEventsSelector EventSelector = "system event" ShutdownEventSelector EventSelector = "shutdown event" - ShutdownTimeout int = 10 + ShutdownTimeout time.Duration = time.Duration(10) * time.Second ) var ( @@ -88,7 +88,7 @@ } } return errors.New("Emit() problem: wrong event delivered") - case <-time.After(time.Duration(ShutdownTimeout) * time.Second): + case <-time.After(ShutdownTimeout): return errors.New("Shutdown timeout") } }
diff --git a/events/event_manager.go b/events/event_manager.go index b98089e..7d7c69f 100644 --- a/events/event_manager.go +++ b/events/event_manager.go
@@ -39,7 +39,12 @@ } em.Listen(apid.EventDeliveredSelector, handler) - if !em.dispatchers[selector].Send(event) { + + em.Lock() + dispatch := em.dispatchers[selector] + em.Unlock() + + if !dispatch.Send(event) { em.sendDelivered(selector, event, 0) // in case of no dispatcher } }
diff --git a/events/events_test.go b/events/events_test.go index e1099c1..8c338b6 100644 --- a/events/events_test.go +++ b/events/events_test.go
@@ -9,7 +9,6 @@ . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" - "sync/atomic" "fmt" "strconv" )