1
0
Fork 0
mirror of https://github.com/FrankerFaceZ/FrankerFaceZ.git synced 2025-07-30 06:28:31 +00:00

Make sure that the reader thread finishes when main thread

calls CloseConnection
This commit is contained in:
Kane York 2015-10-29 01:30:25 -07:00
parent 33bf762a00
commit 37833043bd

View file

@ -147,12 +147,13 @@ func HandleSocketConnection(conn *websocket.Conn) {
_clientChan := make(chan ClientMessage)
_serverMessageChan := make(chan ClientMessage)
_errorChan := make(chan error)
stoppedChan := make(chan struct{})
var client ClientInfo
client.MessageChannel = _serverMessageChan
// Launch receiver goroutine
go func(errorChan chan<- error, clientChan chan<- ClientMessage) {
go func(errorChan chan<- error, clientChan chan<- ClientMessage, stoppedChan <-chan struct{}) {
var msg ClientMessage
var messageType int
var packet []byte
@ -171,7 +172,13 @@ func HandleSocketConnection(conn *websocket.Conn) {
if msg.MessageID == 0 {
continue
}
clientChan <- msg
select {
case clientChan <- msg:
case <-stoppedChan:
close(errorChan)
close(clientChan)
return
}
}
_, isClose := err.(*websocket.CloseError)
@ -182,7 +189,7 @@ func HandleSocketConnection(conn *websocket.Conn) {
close(errorChan)
close(clientChan)
// exit
}(_errorChan, _clientChan)
}(_errorChan, _clientChan, stoppedChan)
conn.SetPongHandler(func(pongBody string) error {
client.pingCount = 0
@ -244,6 +251,8 @@ RunLoop:
}
}()
close(stoppedChan)
// Stop getting messages...
UnsubscribeAll(&client)