diff --git a/p2p/protocol/identify/id.go b/p2p/protocol/identify/id.go index ce8ea91cb346a89145750431c973d85890dab05c..e756bb060b20463444aae1b787020e8bc4ba4925 100644 --- a/p2p/protocol/identify/id.go +++ b/p2p/protocol/identify/id.go @@ -72,9 +72,12 @@ func (ids *IDService) IdentifyConn(c inet.Conn) { <-wait // already identifying it. wait for it. return } - ids.currid[c] = make(chan struct{}) + ch := make(chan struct{}) + ids.currid[c] = ch ids.currmu.Unlock() + defer close(ch) + s, err := c.NewStream() if err != nil { log.Debugf("error opening initial stream for %s: %s", ID, err) @@ -97,7 +100,7 @@ func (ids *IDService) IdentifyConn(c inet.Conn) { ids.ResponseHandler(s) ids.currmu.Lock() - ch, found := ids.currid[c] + _, found := ids.currid[c] delete(ids.currid, c) ids.currmu.Unlock() @@ -105,8 +108,6 @@ func (ids *IDService) IdentifyConn(c inet.Conn) { log.Debugf("IdentifyConn failed to find channel (programmer error) for %s", c) return } - - close(ch) // release everyone waiting. } func (ids *IDService) RequestHandler(s inet.Stream) {