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