event: fix inconsistency in Lock and Unlock (#20933)

Co-authored-by: Felix Lange <fjl@twurst.com>
This commit is contained in:
Boqin Qin 2020-04-17 20:51:38 +08:00 committed by GitHub
parent 7a63faf734
commit ca22d0761b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -104,6 +104,7 @@ func (mux *TypeMux) Post(ev interface{}) error {
// Stop blocks until all current deliveries have finished. // Stop blocks until all current deliveries have finished.
func (mux *TypeMux) Stop() { func (mux *TypeMux) Stop() {
mux.mutex.Lock() mux.mutex.Lock()
defer mux.mutex.Unlock()
for _, subs := range mux.subm { for _, subs := range mux.subm {
for _, sub := range subs { for _, sub := range subs {
sub.closewait() sub.closewait()
@ -111,11 +112,11 @@ func (mux *TypeMux) Stop() {
} }
mux.subm = nil mux.subm = nil
mux.stopped = true mux.stopped = true
mux.mutex.Unlock()
} }
func (mux *TypeMux) del(s *TypeMuxSubscription) { func (mux *TypeMux) del(s *TypeMuxSubscription) {
mux.mutex.Lock() mux.mutex.Lock()
defer mux.mutex.Unlock()
for typ, subs := range mux.subm { for typ, subs := range mux.subm {
if pos := find(subs, s); pos >= 0 { if pos := find(subs, s); pos >= 0 {
if len(subs) == 1 { if len(subs) == 1 {
@ -125,7 +126,6 @@ func (mux *TypeMux) del(s *TypeMuxSubscription) {
} }
} }
} }
s.mux.mutex.Unlock()
} }
func find(slice []*TypeMuxSubscription, item *TypeMuxSubscription) int { func find(slice []*TypeMuxSubscription, item *TypeMuxSubscription) int {