fix(mux) hold lock when reading default handler field
Brian Tiger Chow committed
Jan 30, 2015 at 03:47 UTC
ecddbd3a56a6a7be872cb6a233faa01512ab8629
1 file changed
+3
-3
p2p/protocol/mux.go
+3
-3
@@ -24,11 +24,11 @@ type streamHandlerMap map[ID]inet.StreamHandler
24
// It contains the handlers for each protocol accepted.
25
// It dispatches handlers for streams opened by remote peers.
26
type Mux struct {
27
- // defaultHandler handles unknown protocols. Callers modify at your own risk.
28
- defaultHandler inet.StreamHandler
27
28
lock sync.RWMutex
29
handlers streamHandlerMap
30
+ // defaultHandler handles unknown protocols. Callers modify at your own risk.
31
+ defaultHandler inet.StreamHandler
32
}
33
34
func NewMux() *Mux {
@@ -59,8 +59,8 @@ func (m *Mux) readHeader(s io.Reader) (ID, inet.StreamHandler, error) {
59
60
// log.Debug("readHeader got:", p)
61
m.lock.RLock()
62
+ defer m.lock.RUnlock()
63
h, found := m.handlers[p]
63
- m.lock.RUnlock()
64
65
switch {
66
case !found && m.defaultHandler != nil: