1
0
Fork 0
mirror of https://github.com/FrankerFaceZ/FrankerFaceZ.git synced 2025-08-01 15:38: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) _clientChan := make(chan ClientMessage)
_serverMessageChan := make(chan ClientMessage) _serverMessageChan := make(chan ClientMessage)
_errorChan := make(chan error) _errorChan := make(chan error)
stoppedChan := make(chan struct{})
var client ClientInfo var client ClientInfo
client.MessageChannel = _serverMessageChan client.MessageChannel = _serverMessageChan
// Launch receiver goroutine // 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 msg ClientMessage
var messageType int var messageType int
var packet []byte var packet []byte
@ -171,7 +172,13 @@ func HandleSocketConnection(conn *websocket.Conn) {
if msg.MessageID == 0 { if msg.MessageID == 0 {
continue continue
} }
clientChan <- msg select {
case clientChan <- msg:
case <-stoppedChan:
close(errorChan)
close(clientChan)
return
}
} }
_, isClose := err.(*websocket.CloseError) _, isClose := err.(*websocket.CloseError)
@ -182,7 +189,7 @@ func HandleSocketConnection(conn *websocket.Conn) {
close(errorChan) close(errorChan)
close(clientChan) close(clientChan)
// exit // exit
}(_errorChan, _clientChan) }(_errorChan, _clientChan, stoppedChan)
conn.SetPongHandler(func(pongBody string) error { conn.SetPongHandler(func(pongBody string) error {
client.pingCount = 0 client.pingCount = 0
@ -244,6 +251,8 @@ RunLoop:
} }
}() }()
close(stoppedChan)
// Stop getting messages... // Stop getting messages...
UnsubscribeAll(&client) UnsubscribeAll(&client)