aboutsummaryrefslogtreecommitdiffstats
path: root/event/event.go
diff options
context:
space:
mode:
authorJeffrey Wilcke <geffobscura@gmail.com>2016-05-12 23:57:45 +0800
committerJeffrey Wilcke <geffobscura@gmail.com>2016-05-13 02:38:09 +0800
commit7c1f74713e273d1e4f1982466eb6fd96e55e8c4d (patch)
tree1a53b64b4188a41deb22034a5c7188f0bb3db3d2 /event/event.go
parenta5ff487889e8efae58461e0967cd6ec49facf6e9 (diff)
downloaddexon-7c1f74713e273d1e4f1982466eb6fd96e55e8c4d.tar.gz
dexon-7c1f74713e273d1e4f1982466eb6fd96e55e8c4d.tar.zst
dexon-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.go3
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 {