summaryrefslogtreecommitdiffstats
path: root/app/web_conn.go
diff options
context:
space:
mode:
authorChris <ccbrown112@gmail.com>2017-10-16 14:02:33 -0700
committerGitHub <noreply@github.com>2017-10-16 14:02:33 -0700
commitce314425d1e1ab5703c41510a0dba569fb6ffad3 (patch)
treeec7161d5ce785f3fefde97f5be6994f32adfbb2e /app/web_conn.go
parent868bd76f404158763f54d59f2c7284fe1a4029c8 (diff)
downloadchat-ce314425d1e1ab5703c41510a0dba569fb6ffad3.tar.gz
chat-ce314425d1e1ab5703c41510a0dba569fb6ffad3.tar.bz2
chat-ce314425d1e1ab5703c41510a0dba569fb6ffad3.zip
Fix webconn shutdown race (#7631)
* fix webconn shutdown race * make sure writePump returns promptly if readPump returns first * fix app shutdown race * minor improvement
Diffstat (limited to 'app/web_conn.go')
-rw-r--r--app/web_conn.go5
1 files changed, 3 insertions, 2 deletions
diff --git a/app/web_conn.go b/app/web_conn.go
index 92b54723a..1c74e65a5 100644
--- a/app/web_conn.go
+++ b/app/web_conn.go
@@ -59,7 +59,7 @@ func (a *App) NewWebConn(ws *websocket.Conn, session model.Session, t goi18n.Tra
UserId: session.UserId,
T: t,
Locale: locale,
- endWritePump: make(chan struct{}, 1),
+ endWritePump: make(chan struct{}, 2),
pumpFinished: make(chan struct{}, 1),
}
@@ -111,13 +111,14 @@ func (c *WebConn) Pump() {
ch <- struct{}{}
}()
c.readPump()
+ c.endWritePump <- struct{}{}
<-ch
+ c.App.HubUnregister(c)
c.pumpFinished <- struct{}{}
}
func (c *WebConn) readPump() {
defer func() {
- c.App.HubUnregister(c)
c.WebSocket.Close()
}()
c.WebSocket.SetReadLimit(model.SOCKET_MAX_MESSAGE_SIZE_KB)