From c206bdd7a628fe0b4f9f5122592f25b88966f356 Mon Sep 17 00:00:00 2001 From: Alexander Emelin Date: Mon, 16 Sep 2019 21:37:09 +0300 Subject: [PATCH] fix concurrent map read write --- client.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/client.go b/client.go index eb09eb41..513efaa6 100644 --- a/client.go +++ b/client.go @@ -442,12 +442,15 @@ func (c *Client) Close(disconnect *Disconnect) error { disconnect = c.disconnect } - channels := c.channels + channels := make(map[string]ChannelContext, len(c.channels)) + for channel, channelContext := range c.channels { + channels[channel] = channelContext + } c.mu.Unlock() if len(channels) > 0 { // Unsubscribe from all channels. - for channel := range c.channels { + for channel := range channels { err := c.unsubscribe(channel) if err != nil { c.node.logger.log(newLogEntry(LogLevelError, "error unsubscribing client from channel", map[string]interface{}{"channel": channel, "user": c.user, "client": c.uid, "error": err.Error()}))