close keepaliveQuit properly

This commit is contained in:
xinfei.wu 2020-03-09 00:27:52 +08:00 committed by GitHub
parent 22ba8d1f4e
commit 7ebda735e0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -298,11 +298,13 @@ func (c *Client) sendWithWriter(writer io.Writer, packet []byte) error {
// Loop: Receive data from server
func (c *Client) recv(state SMState, 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(state)
return
}
@ -311,7 +313,6 @@ func (c *Client) recv(state SMState, 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.