mirror of
https://github.com/fhmq/hmq.git
synced 2026-04-22 09:48:33 +00:00
fix: mutex deadlock when connection close
This commit is contained in:
@@ -828,11 +828,12 @@ func (c *client) Close() {
|
||||
Timestamp: time.Now().Unix(),
|
||||
})
|
||||
|
||||
if c.mu.Lock(); c.conn != nil {
|
||||
c.mu.Lock()
|
||||
if c.conn != nil {
|
||||
_ = c.conn.Close()
|
||||
c.conn = nil
|
||||
c.mu.Unlock()
|
||||
}
|
||||
c.mu.Unlock()
|
||||
|
||||
if b == nil {
|
||||
return
|
||||
@@ -905,13 +906,14 @@ func (c *client) WriterPacket(packet packets.ControlPacket) error {
|
||||
if packet == nil {
|
||||
return nil
|
||||
}
|
||||
if c.conn == nil {
|
||||
c.Close()
|
||||
return errors.New("connect lost ....")
|
||||
}
|
||||
|
||||
c.mu.Lock()
|
||||
defer c.mu.Unlock()
|
||||
|
||||
if c.conn == nil {
|
||||
return errors.New("connect lost ....")
|
||||
}
|
||||
|
||||
return packet.Write(c.conn)
|
||||
}
|
||||
|
||||
|
||||
@@ -202,11 +202,13 @@ func (c *client) retryDelivery() {
|
||||
c.inflightMu.RLock()
|
||||
ilen := len(c.inflight)
|
||||
|
||||
if c.mu.Lock(); c.conn == nil || ilen == 0 { //Reset timer when client offline OR inflight is empty
|
||||
c.mu.Lock()
|
||||
if c.conn == nil || ilen == 0 { //Reset timer when client offline OR inflight is empty
|
||||
c.inflightMu.RUnlock()
|
||||
c.mu.Unlock()
|
||||
return
|
||||
}
|
||||
c.mu.Unlock()
|
||||
|
||||
// copy the to be retried elements out of the map to only hold the lock for a short time and use the new slice later to iterate
|
||||
// through them
|
||||
|
||||
Reference in New Issue
Block a user