@cryptotaxi247 / kubo / commits / ecddbd3a5

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: