diff options
author | Felix Lange <fjl@twurst.com> | 2014-10-17 00:10:09 +0800 |
---|---|---|
committer | Felix Lange <fjl@twurst.com> | 2014-10-17 00:50:48 +0800 |
commit | 690690489610352d43f8547744b6c9486ad5affa (patch) | |
tree | 2d8846b015d3e42b1daf1bd74ca40ef883bb9f5c /event/event.go | |
parent | 10bbf265b2e8f1906602d2604f755241b8eb49e6 (diff) | |
download | dexon-690690489610352d43f8547744b6c9486ad5affa.tar dexon-690690489610352d43f8547744b6c9486ad5affa.tar.gz dexon-690690489610352d43f8547744b6c9486ad5affa.tar.bz2 dexon-690690489610352d43f8547744b6c9486ad5affa.tar.lz dexon-690690489610352d43f8547744b6c9486ad5affa.tar.xz dexon-690690489610352d43f8547744b6c9486ad5affa.tar.zst dexon-690690489610352d43f8547744b6c9486ad5affa.zip |
event: make TypeMux zero value ready to use
Diffstat (limited to 'event/event.go')
-rw-r--r-- | event/event.go | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/event/event.go b/event/event.go index 344d1e3f6..d11a0e9bd 100644 --- a/event/event.go +++ b/event/event.go @@ -23,6 +23,8 @@ type Subscription interface { // A TypeMux dispatches events to registered receivers. Receivers can be // registered to handle events of certain type. Any operation // called after mux is stopped will return ErrMuxClosed. +// +// The zero value is ready to use. type TypeMux struct { mutex sync.RWMutex subm map[reflect.Type][]*muxsub @@ -32,11 +34,6 @@ type TypeMux struct { // ErrMuxClosed is returned when Posting on a closed TypeMux. var ErrMuxClosed = errors.New("event: mux closed") -// NewTypeMux creates a running mux. -func NewTypeMux() *TypeMux { - return &TypeMux{subm: make(map[reflect.Type][]*muxsub)} -} - // Subscribe creates a subscription for events of the given types. The // subscription's channel is closed when it is unsubscribed // or the mux is closed. @@ -44,9 +41,11 @@ func (mux *TypeMux) Subscribe(types ...interface{}) Subscription { sub := newsub(mux) mux.mutex.Lock() if mux.stopped { - mux.mutex.Unlock() close(sub.postC) } else { + if mux.subm == nil { + mux.subm = make(map[reflect.Type][]*muxsub) + } for _, t := range types { rtyp := reflect.TypeOf(t) oldsubs := mux.subm[rtyp] @@ -55,8 +54,8 @@ func (mux *TypeMux) Subscribe(types ...interface{}) Subscription { subs[len(oldsubs)] = sub mux.subm[rtyp] = subs } - mux.mutex.Unlock() } + mux.mutex.Unlock() return sub } |