From 27e41c4ad57a9242f15c66c48cd531fa87281487 Mon Sep 17 00:00:00 2001 From: Dominic Wong Date: Wed, 27 May 2020 20:18:26 +0100 Subject: [PATCH] fix locking of socket pool --- util/socket/pool.go | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/util/socket/pool.go b/util/socket/pool.go index 9439f131..8ee2afb4 100644 --- a/util/socket/pool.go +++ b/util/socket/pool.go @@ -19,12 +19,18 @@ func (p *Pool) Get(id string) (*Socket, bool) { } p.RUnlock() - // create new socket - socket = New(id) // save socket p.Lock() + defer p.Unlock() + // double checked locking + socket, ok = p.pool[id] + if ok { + return socket, ok + } + // create new socket + socket = New(id) p.pool[id] = socket - p.Unlock() + // return socket return socket, false }