diff options
author | Valery Piashchynski <[email protected]> | 2020-12-17 03:23:41 +0300 |
---|---|---|
committer | Valery Piashchynski <[email protected]> | 2020-12-17 03:23:41 +0300 |
commit | 2d5a042cd4c80b1989b8235a7412110d435b1130 (patch) | |
tree | b4c6a4d0b72bb05555142de80c5402c3d1b1ba69 /util | |
parent | 40cfd9f6b44dfe987bfbf010bf67b32abdc64208 (diff) |
Fix race condition
Diffstat (limited to 'util')
-rwxr-xr-x | util/events.go | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/util/events.go b/util/events.go index 259c7ddb..676e2f40 100755 --- a/util/events.go +++ b/util/events.go @@ -1,12 +1,15 @@ package util import ( + "sync" + "github.com/spiral/roadrunner/v2/interfaces/events" ) // EventHandler helps to broadcast events to multiple listeners. type EventHandler struct { listeners []events.EventListener + sync.Mutex } func NewEventsHandler() events.Handler { @@ -15,16 +18,22 @@ func NewEventsHandler() events.Handler { // NumListeners returns number of event listeners. func (eb *EventHandler) NumListeners() int { + eb.Lock() + defer eb.Unlock() return len(eb.listeners) } // AddListener registers new event listener. func (eb *EventHandler) AddListener(listener events.EventListener) { + eb.Lock() + defer eb.Unlock() eb.listeners = append(eb.listeners, listener) } // Push broadcast events across all event listeners. func (eb *EventHandler) Push(e interface{}) { + eb.Lock() + defer eb.Unlock() for _, listener := range eb.listeners { listener(e) } |