diff options
author | Felix Lange <fjl@twurst.com> | 2014-10-17 00:59:28 +0800 |
---|---|---|
committer | Felix Lange <fjl@twurst.com> | 2014-10-17 00:59:28 +0800 |
commit | fa84e50ddb8e64d4cb92d58e235cfed13761f21e (patch) | |
tree | d0dc6c7e0d31f49b0d3ac3cc2b7bb8550ea2351e /event/event.go | |
parent | ade980912da4afb7d92f845b8d41955851791dc9 (diff) | |
download | go-tangerine-fa84e50ddb8e64d4cb92d58e235cfed13761f21e.tar.gz go-tangerine-fa84e50ddb8e64d4cb92d58e235cfed13761f21e.tar.zst go-tangerine-fa84e50ddb8e64d4cb92d58e235cfed13761f21e.zip |
event: panic for duplicate type
Diffstat (limited to 'event/event.go')
-rw-r--r-- | event/event.go | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/event/event.go b/event/event.go index d11a0e9bd..540fbba65 100644 --- a/event/event.go +++ b/event/event.go @@ -3,6 +3,7 @@ package event import ( "errors" + "fmt" "reflect" "sync" ) @@ -40,6 +41,7 @@ var ErrMuxClosed = errors.New("event: mux closed") func (mux *TypeMux) Subscribe(types ...interface{}) Subscription { sub := newsub(mux) mux.mutex.Lock() + defer mux.mutex.Unlock() if mux.stopped { close(sub.postC) } else { @@ -49,13 +51,15 @@ func (mux *TypeMux) Subscribe(types ...interface{}) Subscription { for _, t := range types { rtyp := reflect.TypeOf(t) oldsubs := mux.subm[rtyp] + if find(oldsubs, sub) != -1 { + panic(fmt.Sprintf("event: duplicate type %s in Subscribe", rtyp)) + } subs := make([]*muxsub, len(oldsubs)+1) copy(subs, oldsubs) subs[len(oldsubs)] = sub mux.subm[rtyp] = subs } } - mux.mutex.Unlock() return sub } |