Skip to content

Commit e67744b

Browse files
authored
chore(connmanager): propagate CancelledError (#1276)
1 parent 5843e6f commit e67744b

File tree

8 files changed

+40
-23
lines changed

8 files changed

+40
-23
lines changed

libp2p/connmanager.nim

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,9 @@ type
4242
else:
4343
discard
4444

45-
ConnEventHandler* =
46-
proc(peerId: PeerId, event: ConnEvent): Future[void] {.gcsafe, async: (raises: []).}
45+
ConnEventHandler* = proc(peerId: PeerId, event: ConnEvent): Future[void] {.
46+
gcsafe, async: (raises: [CancelledError])
47+
.}
4748

4849
PeerEventKind* {.pure.} = enum
4950
Left
@@ -57,8 +58,9 @@ type
5758
else:
5859
discard
5960

60-
PeerEventHandler* =
61-
proc(peerId: PeerId, event: PeerEvent): Future[void] {.gcsafe, async: (raises: []).}
61+
PeerEventHandler* = proc(peerId: PeerId, event: PeerEvent): Future[void] {.
62+
gcsafe, async: (raises: [CancelledError])
63+
.}
6264

6365
ConnManager* = ref object of RootObj
6466
maxConnsPerPeer: int

libp2p/protocols/connectivity/autonat/service.nim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ method setup*(
216216
if self.askNewConnectedPeers:
217217
self.newConnectedPeerHandler = proc(
218218
peerId: PeerId, event: PeerEvent
219-
): Future[void] {.async: (raises: []).} =
219+
): Future[void] {.async: (raises: [CancelledError]).} =
220220
discard askPeer(self, switch, peerId)
221221

222222
switch.connManager.addPeerEventHandler(

libp2p/protocols/connectivity/relay/relay.nim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,7 @@ proc handleStreamV1(
343343
proc setup*(r: Relay, switch: Switch) =
344344
r.switch = switch
345345
r.switch.addPeerEventHandler(
346-
proc(peerId: PeerId, event: PeerEvent) {.async: (raises: []).} =
346+
proc(peerId: PeerId, event: PeerEvent) {.async: (raises: [CancelledError]).} =
347347
r.rsvp.del(peerId),
348348
Left,
349349
)

libp2p/protocols/pubsub/pubsub.nim

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -680,7 +680,9 @@ proc init*[PubParams: object | bool](
680680
topicsHigh: int.high,
681681
)
682682

683-
proc peerEventHandler(peerId: PeerId, event: PeerEvent) {.async: (raises: []).} =
683+
proc peerEventHandler(
684+
peerId: PeerId, event: PeerEvent
685+
) {.async: (raises: [CancelledError]).} =
684686
if event.kind == PeerEventKind.Joined:
685687
pubsub.subscribePeer(peerId)
686688
else:

libp2p/protocols/rendezvous.nim

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -699,7 +699,9 @@ proc unsubscribe*(
699699

700700
proc setup*(rdv: RendezVous, switch: Switch) =
701701
rdv.switch = switch
702-
proc handlePeer(peerId: PeerId, event: PeerEvent) {.async: (raises: []).} =
702+
proc handlePeer(
703+
peerId: PeerId, event: PeerEvent
704+
) {.async: (raises: [CancelledError]).} =
703705
if event.kind == PeerEventKind.Joined:
704706
rdv.peers.add(peerId)
705707
elif event.kind == PeerEventKind.Left:

libp2p/services/autorelayservice.nim

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,12 +72,14 @@ method setup*(
7272
if hasBeenSetUp:
7373
proc handlePeerIdentified(
7474
peerId: PeerId, event: PeerEvent
75-
) {.async: (raises: []).} =
75+
) {.async: (raises: [CancelledError]).} =
7676
trace "Peer Identified", peerId
7777
if self.relayPeers.len < self.maxNumRelays:
7878
self.peerAvailable.fire()
7979

80-
proc handlePeerLeft(peerId: PeerId, event: PeerEvent) {.async: (raises: []).} =
80+
proc handlePeerLeft(
81+
peerId: PeerId, event: PeerEvent
82+
) {.async: (raises: [CancelledError]).} =
8183
trace "Peer Left", peerId
8284
self.relayPeers.withValue(peerId, future):
8385
future[].cancel()

libp2p/services/hpservice.nim

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ proc closeRelayConn(relayedConn: Connection) {.async: (raises: [CancelledError])
6565

6666
proc newConnectedPeerHandler(
6767
self: HPService, switch: Switch, peerId: PeerId, event: PeerEvent
68-
) {.async: (raises: []).} =
68+
) {.async: (raises: [CancelledError]).} =
6969
try:
7070
# Get all connections to the peer. If there is at least one non-relayed connection, return.
7171
let connections = switch.connManager.getConnections()[peerId].mapIt(it.connection)
@@ -88,6 +88,8 @@ proc newConnectedPeerHandler(
8888
switch.peerInfo.listenAddrs.mapIt(switch.peerStore.guessDialableAddr(it))
8989
await dcutrClient.startSync(switch, peerId, natAddrs)
9090
await closeRelayConn(relayedConn)
91+
except CancelledError as err:
92+
raise err
9193
except CatchableError as err:
9294
debug "Hole punching failed during dcutr", err = err.msg
9395

@@ -106,11 +108,8 @@ method setup*(
106108

107109
self.newConnectedPeerHandler = proc(
108110
peerId: PeerId, event: PeerEvent
109-
) {.async: (raises: []).} =
110-
try:
111-
await newConnectedPeerHandler(self, switch, peerId, event)
112-
except CancelledError:
113-
trace "hole punching cancelled"
111+
) {.async: (raises: [CancelledError]).} =
112+
await newConnectedPeerHandler(self, switch, peerId, event)
114113

115114
switch.connManager.addPeerEventHandler(
116115
self.newConnectedPeerHandler, PeerEventKind.Joined

tests/testswitch.nim

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -316,7 +316,7 @@ suite "Switch":
316316

317317
var step = 0
318318
var kinds: set[ConnEventKind]
319-
proc hook(peerId: PeerId, event: ConnEvent) {.async: (raises: []).} =
319+
proc hook(peerId: PeerId, event: ConnEvent) {.async: (raises: [CancelledError]).} =
320320
kinds = kinds + {event.kind}
321321
case step
322322
of 0:
@@ -364,7 +364,7 @@ suite "Switch":
364364

365365
var step = 0
366366
var kinds: set[ConnEventKind]
367-
proc hook(peerId: PeerId, event: ConnEvent) {.async: (raises: []).} =
367+
proc hook(peerId: PeerId, event: ConnEvent) {.async: (raises: [CancelledError]).} =
368368
kinds = kinds + {event.kind}
369369
case step
370370
of 0:
@@ -412,7 +412,9 @@ suite "Switch":
412412

413413
var step = 0
414414
var kinds: set[PeerEventKind]
415-
proc handler(peerId: PeerId, event: PeerEvent) {.async: (raises: []).} =
415+
proc handler(
416+
peerId: PeerId, event: PeerEvent
417+
) {.async: (raises: [CancelledError]).} =
416418
kinds = kinds + {event.kind}
417419
case step
418420
of 0:
@@ -459,7 +461,9 @@ suite "Switch":
459461

460462
var step = 0
461463
var kinds: set[PeerEventKind]
462-
proc handler(peerId: PeerId, event: PeerEvent) {.async: (raises: []).} =
464+
proc handler(
465+
peerId: PeerId, event: PeerEvent
466+
) {.async: (raises: [CancelledError]).} =
463467
kinds = kinds + {event.kind}
464468
case step
465469
of 0:
@@ -512,7 +516,9 @@ suite "Switch":
512516

513517
var step = 0
514518
var kinds: set[PeerEventKind]
515-
proc handler(peerId: PeerId, event: PeerEvent) {.async: (raises: []).} =
519+
proc handler(
520+
peerId: PeerId, event: PeerEvent
521+
) {.async: (raises: [CancelledError]).} =
516522
kinds = kinds + {event.kind}
517523
case step
518524
of 0:
@@ -570,7 +576,7 @@ suite "Switch":
570576
var switches: seq[Switch]
571577
var done = newFuture[void]()
572578
var onConnect: Future[void]
573-
proc hook(peerId: PeerId, event: ConnEvent) {.async: (raises: []).} =
579+
proc hook(peerId: PeerId, event: ConnEvent) {.async: (raises: [CancelledError]).} =
574580
try:
575581
case event.kind
576582
of ConnEventKind.Connected:
@@ -579,6 +585,8 @@ suite "Switch":
579585
of ConnEventKind.Disconnected:
580586
check not switches[0].isConnected(peerInfo.peerId)
581587
done.complete()
588+
except CancelledError as e:
589+
raise e
582590
except CatchableError:
583591
check false # should not get here
584592

@@ -608,7 +616,7 @@ suite "Switch":
608616
var switches: seq[Switch]
609617
var done = newFuture[void]()
610618
var onConnect: Future[void]
611-
proc hook(peerId2: PeerId, event: ConnEvent) {.async: (raises: []).} =
619+
proc hook(peerId2: PeerId, event: ConnEvent) {.async: (raises: [CancelledError]).} =
612620
try:
613621
case event.kind
614622
of ConnEventKind.Connected:
@@ -623,6 +631,8 @@ suite "Switch":
623631
check not switches[0].isConnected(peerInfo.peerId)
624632
done.complete()
625633
conns.dec
634+
except CancelledError as e:
635+
raise e
626636
except CatchableError:
627637
check false # should not get here
628638

0 commit comments

Comments
 (0)