diff options
author | Chris <ccbrown112@gmail.com> | 2017-10-16 14:02:33 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-10-16 14:02:33 -0700 |
commit | ce314425d1e1ab5703c41510a0dba569fb6ffad3 (patch) | |
tree | ec7161d5ce785f3fefde97f5be6994f32adfbb2e /app/web_conn.go | |
parent | 868bd76f404158763f54d59f2c7284fe1a4029c8 (diff) | |
download | chat-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.go | 5 |
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) |