fixes #1; events.go: claim full lock on delete listener
This commit is contained in:
parent
acabc4d3bb
commit
c15bcd487f
|
@ -74,13 +74,15 @@ func (evsw *EventSwitch) RemoveListener(listenerID string) {
|
||||||
// Get and remove listener
|
// Get and remove listener
|
||||||
evsw.mtx.RLock()
|
evsw.mtx.RLock()
|
||||||
listener := evsw.listeners[listenerID]
|
listener := evsw.listeners[listenerID]
|
||||||
delete(evsw.listeners, listenerID)
|
|
||||||
evsw.mtx.RUnlock()
|
evsw.mtx.RUnlock()
|
||||||
|
|
||||||
if listener == nil {
|
if listener == nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
evsw.mtx.Lock()
|
||||||
|
delete(evsw.listeners, listenerID)
|
||||||
|
evsw.mtx.Unlock()
|
||||||
|
|
||||||
// Remove callback for each event.
|
// Remove callback for each event.
|
||||||
listener.SetRemoved()
|
listener.SetRemoved()
|
||||||
for _, event := range listener.GetEvents() {
|
for _, event := range listener.GetEvents() {
|
||||||
|
|
Loading…
Reference in New Issue