From 615ceab59700f9775f02df3eac8c0c86e775ab83 Mon Sep 17 00:00:00 2001 From: Julien Salleyron Date: Fri, 15 Mar 2019 10:04:05 +0100 Subject: [PATCH] Fix lock problem in server --- pkg/server/server_entrypoint_tcp.go | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/pkg/server/server_entrypoint_tcp.go b/pkg/server/server_entrypoint_tcp.go index 2daefd125..a3443cc8a 100644 --- a/pkg/server/server_entrypoint_tcp.go +++ b/pkg/server/server_entrypoint_tcp.go @@ -288,16 +288,20 @@ func (c *connectionTracker) RemoveConnection(conn net.Conn) { delete(c.conns, conn) } +func (c *connectionTracker) isEmpty() bool { + c.lock.RLock() + defer c.lock.RUnlock() + return len(c.conns) == 0 +} + // Shutdown wait for the connection closing func (c *connectionTracker) Shutdown(ctx context.Context) error { ticker := time.NewTicker(500 * time.Millisecond) defer ticker.Stop() for { - c.lock.RLock() - if len(c.conns) == 0 { + if c.isEmpty() { return nil } - c.lock.RUnlock() select { case <-ctx.Done(): return ctx.Err()