From 3362e1a343f30cc3b5d110c6cf2b96194dcc832f Mon Sep 17 00:00:00 2001 From: Arnaud Date: Mon, 25 May 2026 12:07:30 +0400 Subject: [PATCH] Close peer event handler --- storage/nat.nim | 3 ++- storage/storage.nim | 11 ++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/storage/nat.nim b/storage/nat.nim index 387c2168..363e8307 100644 --- a/storage/nat.nim +++ b/storage/nat.nim @@ -297,7 +297,7 @@ proc holePunchIfRelayed*( except DcutrError as err: debug "Hole punching failed during dcutr", description = err.msg -proc setupHolePunching*(switch: Switch) = +proc setupHolePunching*(switch: Switch): PeerEventHandler = try: switch.mount(Dcutr.new(switch)) except LPError as err: @@ -308,3 +308,4 @@ proc setupHolePunching*(switch: Switch) = ) {.async: (raises: [CancelledError]).} = await holePunchIfRelayed(switch, peerId) switch.addPeerEventHandler(handler, PeerEventKind.Joined) + handler diff --git a/storage/storage.nim b/storage/storage.nim index 9374bcb8..009bc9dc 100644 --- a/storage/storage.nim +++ b/storage/storage.nim @@ -17,6 +17,7 @@ import pkg/chronos import pkg/taskpools import pkg/presto import pkg/libp2p +import pkg/libp2p/connmanager import pkg/libp2p/protocols/connectivity/autonatv2/[service, client] import pkg/libp2p/protocols/connectivity/relay/client as relayClientModule import pkg/libp2p/protocols/connectivity/relay/relay as relayModule @@ -60,6 +61,7 @@ type autoRelayService*: Option[AutoRelayService] natMapper*: Option[NatPortMapper] natRouter*: Option[NatRouter] + holePunchHandler: Option[connmanager.PeerEventHandler] isStarted: bool StoragePrivateKey* = libp2p.PrivateKey # alias @@ -142,6 +144,11 @@ proc stop*(s: StorageServer) {.async.} = if s.natMapper.isSome: s.natMapper.get.close() + if s.holePunchHandler.isSome: + s.storageNode.switch.removePeerEventHandler( + s.holePunchHandler.get, PeerEventKind.Joined + ) + var futures = @[ s.storageNode.switch.stop(), s.storageNode.stop(), @@ -412,6 +419,7 @@ proc new*( # NAT services var natMapper: Option[NatPortMapper] var autoRelayService: Option[AutoRelayService] + var holePunchHandler: Option[connmanager.PeerEventHandler] if autonatService.isSome: let relayService = AutoRelayService.new( @@ -453,7 +461,7 @@ proc new*( ) ) - setupHolePunching(switch) + holePunchHandler = some(setupHolePunching(switch)) # REST server var restServer: RestServerRef = nil @@ -483,4 +491,5 @@ proc new*( autoRelayService: autoRelayService, natMapper: natMapper, natRouter: natRouter, + holePunchHandler: holePunchHandler, )