[relay-server] Always close ws conn when work thread exit (#2879)

Close ws conn when work thread exit
This commit is contained in:
Zoltan Papp 2024-11-13 15:02:51 +01:00 committed by GitHub
parent 39329e12a1
commit b48afd92fd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -16,6 +16,8 @@ import (
const ( const (
bufferSize = 8820 bufferSize = 8820
errCloseConn = "failed to close connection to peer: %s"
) )
// Peer represents a peer connection // Peer represents a peer connection
@ -46,6 +48,12 @@ func NewPeer(metrics *metrics.Metrics, id []byte, conn net.Conn, store *Store) *
// It manages the protocol (healthcheck, transport, close). Read the message and determine the message type and handle // It manages the protocol (healthcheck, transport, close). Read the message and determine the message type and handle
// the message accordingly. // the message accordingly.
func (p *Peer) Work() { func (p *Peer) Work() {
defer func() {
if err := p.conn.Close(); err != nil && !errors.Is(err, net.ErrClosed) {
p.log.Errorf(errCloseConn, err)
}
}()
ctx, cancel := context.WithCancel(context.Background()) ctx, cancel := context.WithCancel(context.Background())
defer cancel() defer cancel()
@ -97,7 +105,7 @@ func (p *Peer) handleMsgType(ctx context.Context, msgType messages.MsgType, hc *
case messages.MsgTypeClose: case messages.MsgTypeClose:
p.log.Infof("peer exited gracefully") p.log.Infof("peer exited gracefully")
if err := p.conn.Close(); err != nil { if err := p.conn.Close(); err != nil {
log.Errorf("failed to close connection to peer: %s", err) log.Errorf(errCloseConn, err)
} }
default: default:
p.log.Warnf("received unexpected message type: %s", msgType) p.log.Warnf("received unexpected message type: %s", msgType)
@ -121,9 +129,8 @@ func (p *Peer) CloseGracefully(ctx context.Context) {
p.log.Errorf("failed to send close message to peer: %s", p.String()) p.log.Errorf("failed to send close message to peer: %s", p.String())
} }
err = p.conn.Close() if err := p.conn.Close(); err != nil {
if err != nil { p.log.Errorf(errCloseConn, err)
p.log.Errorf("failed to close connection to peer: %s", err)
} }
} }
@ -132,7 +139,7 @@ func (p *Peer) Close() {
defer p.connMu.Unlock() defer p.connMu.Unlock()
if err := p.conn.Close(); err != nil { if err := p.conn.Close(); err != nil {
p.log.Errorf("failed to close connection to peer: %s", err) p.log.Errorf(errCloseConn, err)
} }
} }