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 { diff --git a/event/event_test.go b/event/event_test.go index 323cfea49..394029301 100644 --- a/event/event_test.go +++ b/event/event_test.go @@ -25,6 +25,14 @@ import ( type testEvent int +func TestSubCloseUnsub(t *testing.T) { + // the point of this test is **not** to panic + var mux TypeMux + mux.Stop() + sub := mux.Subscribe(int(0)) + sub.Unsubscribe() +} + func TestSub(t *testing.T) { mux := new(TypeMux) defer mux.Stop()