From b43def91648521c928ad1902b5d57434d12b8f6c Mon Sep 17 00:00:00 2001 From: Pascal Fischer Date: Wed, 7 May 2025 17:45:51 +0200 Subject: [PATCH] exchange semaphore --- management/server/peer.go | 33 ++++++++++----------------------- 1 file changed, 10 insertions(+), 23 deletions(-) diff --git a/management/server/peer.go b/management/server/peer.go index 9a790c3dd..df528e295 100644 --- a/management/server/peer.go +++ b/management/server/peer.go @@ -447,41 +447,28 @@ func (am *DefaultAccountManager) GetPeerNetwork(ctx context.Context, peerID stri } var ( - semaphoreLimit = 10 - semaphores = make(map[string]chan struct{}) - mu sync.Mutex + mu sync.Mutex + busyMap = make(map[string]bool) ) func TryAcquire(key string) error { mu.Lock() - ch, ok := semaphores[key] - if !ok { - ch = make(chan struct{}, semaphoreLimit) - semaphores[key] = ch - } - mu.Unlock() + defer mu.Unlock() - select { - case ch <- struct{}{}: - return nil - default: + if busyMap[key] { return errors.New("keep your calm") } + + busyMap[key] = true + return nil } +// Release marks a worker key as free. func Release(key string) { mu.Lock() - ch, ok := semaphores[key] - mu.Unlock() - if !ok { - return - } + defer mu.Unlock() - select { - case <-ch: - default: - return - } + delete(busyMap, key) } // AddPeer adds a new peer to the Store.