From 6e84084bb35a416a5ef1942511a0f6110eb8087f Mon Sep 17 00:00:00 2001 From: rcorniere Date: Tue, 10 Mar 2020 17:32:03 +0100 Subject: [PATCH] Close keepalive when recv() ends in client.go --- client.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/client.go b/client.go index 446dcbe..0c691a4 100644 --- a/client.go +++ b/client.go @@ -379,11 +379,13 @@ func (c *Client) sendWithWriter(writer io.Writer, packet []byte) error { // Loop: Receive data from server func (c *Client) recv(keepaliveQuit chan<- struct{}) { + defer func() { + close(keepaliveQuit) + }() for { val, err := stanza.NextPacket(c.transport.GetDecoder()) if err != nil { c.ErrorHandler(err) - close(keepaliveQuit) c.disconnected(c.Session.SMState) return } @@ -392,7 +394,6 @@ func (c *Client) recv(keepaliveQuit chan<- struct{}) { switch packet := val.(type) { case stanza.StreamError: c.router.route(c, val) - close(keepaliveQuit) c.streamError(packet.Error.Local, packet.Text) c.ErrorHandler(errors.New("stream error: " + packet.Error.Local)) // We don't return here, because we want to wait for the stream close tag from the server, or timeout.