diff options
author | Jeffrey Wilcke <geffobscura@gmail.com> | 2016-05-12 23:57:45 +0800 |
---|---|---|
committer | Jeffrey Wilcke <geffobscura@gmail.com> | 2016-05-13 02:38:09 +0800 |
commit | 7c1f74713e273d1e4f1982466eb6fd96e55e8c4d (patch) | |
tree | 1a53b64b4188a41deb22034a5c7188f0bb3db3d2 /event/event.go | |
parent | a5ff487889e8efae58461e0967cd6ec49facf6e9 (diff) | |
download | go-tangerine-7c1f74713e273d1e4f1982466eb6fd96e55e8c4d.tar go-tangerine-7c1f74713e273d1e4f1982466eb6fd96e55e8c4d.tar.gz go-tangerine-7c1f74713e273d1e4f1982466eb6fd96e55e8c4d.tar.bz2 go-tangerine-7c1f74713e273d1e4f1982466eb6fd96e55e8c4d.tar.lz go-tangerine-7c1f74713e273d1e4f1982466eb6fd96e55e8c4d.tar.xz go-tangerine-7c1f74713e273d1e4f1982466eb6fd96e55e8c4d.tar.zst go-tangerine-7c1f74713e273d1e4f1982466eb6fd96e55e8c4d.zip |
event: fixed subscribtions to stopped event mux
This fixes an issue where the following would lead to a panic due to a
channel being closed twice:
* Start mux
* Stop mux
* Sub to mux
* Unsub
This is fixed by setting the subscriptions status to closed resulting in
the Unsubscribe to ignore the request when called.
Diffstat (limited to 'event/event.go')
-rw-r--r-- | event/event.go | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/event/event.go b/event/event.go index 57dd52baa..fd0bcfbd4 100644 --- a/event/event.go +++ b/event/event.go @@ -66,6 +66,9 @@ func (mux *TypeMux) Subscribe(types ...interface{}) Subscription { mux.mutex.Lock() defer mux.mutex.Unlock() if mux.stopped { + // set the status to closed so that calling Unsubscribe after this + // call will short curuit + sub.closed = true close(sub.postC) } else { if mux.subm == nil { |