event: panic for duplicate type

This commit is contained in:
Felix Lange
2014-10-16 18:59:28 +02:00
parent ade980912d
commit fa84e50ddb
2 changed files with 20 additions and 1 deletions

View File

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