3
0
mirror of https://github.com/ergochat/ergo.git synced 2024-11-14 07:59:31 +01:00

execute rehash() in its own goroutine

This prevents a deadlock:

1. rehash() is executing on the main goroutine
2. it's trying to stop a listener goroutine
3. the listener goroutine needs to hand off a new connection to newConns
4. but the main goroutine is blocked by rehash() so it can't receive it
This commit is contained in:
Shivaram Lingamneni 2017-09-08 06:02:54 -04:00
parent b1376d5f71
commit d5528f6e56

View File

@ -436,10 +436,12 @@ func (server *Server) Run() {
case <-server.rehashSignal: case <-server.rehashSignal:
server.logger.Info("rehash", "Rehashing due to SIGHUP") server.logger.Info("rehash", "Rehashing due to SIGHUP")
err := server.rehash() go func() {
if err != nil { err := server.rehash()
server.logger.Error("rehash", fmt.Sprintln("Failed to rehash:", err.Error())) if err != nil {
} server.logger.Error("rehash", fmt.Sprintln("Failed to rehash:", err.Error()))
}
}()
case conn := <-server.newConns: case conn := <-server.newConns:
// check connection limits // check connection limits