fixes #1; events.go: claim full lock on delete listener

This commit is contained in:
Benjamin Bollen 2016-06-17 13:47:15 +02:00
parent acabc4d3bb
commit c15bcd487f
No known key found for this signature in database
GPG Key ID: F78AD719FBEAF215
1 changed files with 4 additions and 2 deletions

View File

@ -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() {