From d486f6ab9b6885ac7468db8b9d5741197a2d7e42 Mon Sep 17 00:00:00 2001 From: Matthias Hanel Date: Wed, 13 May 2020 15:52:29 -0400 Subject: [PATCH] Move reset of internal client to after the account sublist was moved. This does not avoid the race condition, but makes it less likely to trigger in unit tests. Signed-off-by: Matthias Hanel --- server/reload.go | 9 +++++++++ server/server.go | 2 -- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/server/reload.go b/server/reload.go index 944f4c99..ed2ac0ce 100644 --- a/server/reload.go +++ b/server/reload.go @@ -1106,8 +1106,17 @@ func (s *Server) reloadAuthorization() { for _, route := range s.routes { routes = append(routes, route) } + var resetCh chan struct{} + if s.sys != nil { + // can't hold the lock as go routine reading it may be waiting for lock as well + resetCh = s.sys.resetCh + } s.mu.Unlock() + if resetCh != nil { + resetCh <- struct{}{} + } + // Close clients that have moved accounts for _, client := range cclients { client.closeConnection(ClientClosed) diff --git a/server/server.go b/server/server.go index 933d57d7..e51134e1 100644 --- a/server/server.go +++ b/server/server.go @@ -515,8 +515,6 @@ func (s *Server) configureAccounts() error { s.mu.Unlock() // acquires server lock separately s.addSystemAccountExports(acc) - // can't hold the lock as go routine reading it may be waiting for lock as well - s.sys.resetCh <- struct{}{} s.mu.Lock() } if err != nil {