From 17ef2d3b585f211e06da50020b1ceccc7d80d285 Mon Sep 17 00:00:00 2001 From: Chrysostomos Nanakos Date: Tue, 5 May 2026 12:41:52 +0300 Subject: [PATCH] fix: don't release inflight semaphore when acquire is cancelled Signed-off-by: Chrysostomos Nanakos --- storage/blockexchange/network/network.nim | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/storage/blockexchange/network/network.nim b/storage/blockexchange/network/network.nim index 4a08f203..95870595 100644 --- a/storage/blockexchange/network/network.nim +++ b/storage/blockexchange/network/network.nim @@ -107,16 +107,17 @@ proc send*( let peer = b.peers[id] await b.inflightSema.acquire() - await peer.send(msg) + try: + await peer.send(msg) + finally: + try: + b.inflightSema.release() + except AsyncSemaphoreError as err: + error "Failed to release semaphore", msg = err.msg except CancelledError as error: raise error except CatchableError as err: error "Error sending message", peer = id, msg = err.msg - finally: - try: - b.inflightSema.release() - except AsyncSemaphoreError as err: - error "Failed to release semaphore", msg = err.msg proc handleWantList( b: BlockExcNetwork, peer: NetworkPeer, list: WantList