aboutsummaryrefslogtreecommitdiffstats
path: root/event/event.go
diff options
context:
space:
mode:
authorFelix Lange <fjl@twurst.com>2014-10-17 00:10:09 +0800
committerFelix Lange <fjl@twurst.com>2014-10-17 00:50:48 +0800
commit690690489610352d43f8547744b6c9486ad5affa (patch)
tree2d8846b015d3e42b1daf1bd74ca40ef883bb9f5c /event/event.go
parent10bbf265b2e8f1906602d2604f755241b8eb49e6 (diff)
downloaddexon-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.go13
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
}