mirror of
https://github.com/tendermint/tendermint.git
synced 2026-04-19 23:30:38 +00:00
drain pongTimeoutCh and pongTimer's channel to prevent leaks
This commit is contained in:
@@ -352,7 +352,10 @@ FOR_LOOP:
|
||||
c.flush()
|
||||
case <-c.quit:
|
||||
if c.pongTimer != nil {
|
||||
_ = c.pongTimer.Stop()
|
||||
if !c.pongTimer.Stop() {
|
||||
<-c.pongTimer.C
|
||||
}
|
||||
drain(c.pongTimeoutCh)
|
||||
}
|
||||
break FOR_LOOP
|
||||
case <-c.send:
|
||||
@@ -488,7 +491,10 @@ FOR_LOOP:
|
||||
case packetTypePong:
|
||||
c.Logger.Debug("Receive Pong")
|
||||
if c.pongTimer != nil {
|
||||
_ = c.pongTimer.Stop()
|
||||
if !c.pongTimer.Stop() {
|
||||
<-c.pongTimer.C
|
||||
}
|
||||
drain(c.pongTimeoutCh)
|
||||
}
|
||||
case packetTypeMsg:
|
||||
pkt, n, err := msgPacket{}, int(0), error(nil)
|
||||
@@ -764,3 +770,13 @@ type msgPacket struct {
|
||||
func (p msgPacket) String() string {
|
||||
return fmt.Sprintf("MsgPacket{%X:%X T:%X}", p.ChannelID, p.Bytes, p.EOF)
|
||||
}
|
||||
|
||||
func drain(ch <-chan struct{}) {
|
||||
for {
|
||||
select {
|
||||
case <-ch:
|
||||
default:
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user