Skip to content

Commit ba089a1

Browse files
Copilotvladopajic
authored andcommitted
fix(service-discovery): drain bootstrap futures on shutdown (#2823)
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: Vlado Pajić <vlado@brrrrr.at>
1 parent 7e626f5 commit ba089a1

1 file changed

Lines changed: 10 additions & 10 deletions

File tree

libp2p/protocols/service_discovery.nim

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -173,28 +173,28 @@ method stop*(disco: ServiceDiscovery) {.async: (raises: []).} =
173173

174174
# stops the advertiser maintenance loop before draining advertiser tasks,
175175
# so shutdown cannot spawn new registration work while cleanup is running
176-
if not disco.advertiserMaintenanceLoop.isNil():
176+
if not disco.advertiserMaintenanceLoop.isNil:
177177
await disco.advertiserMaintenanceLoop.cancelAndWait()
178178
disco.advertiserMaintenanceLoop = nil
179179

180180
await disco.advertiser.clear()
181181

182-
disco.serviceBootstrapFuts.cancelSoon()
183-
disco.serviceBootstrapFuts = @[]
182+
let serviceBootstrapFuts = move disco.serviceBootstrapFuts
183+
await noCancel serviceBootstrapFuts.cancelAndWait()
184184

185-
if not disco.selfSignedPeerRecordLoop.isNil():
186-
disco.selfSignedPeerRecordLoop.cancelSoon()
185+
if not disco.selfSignedPeerRecordLoop.isNil:
186+
await disco.selfSignedPeerRecordLoop.cancelAndWait()
187187
disco.selfSignedPeerRecordLoop = nil
188188

189-
if not disco.pruneExpiredAdsLoop.isNil():
190-
disco.pruneExpiredAdsLoop.cancelSoon()
189+
if not disco.pruneExpiredAdsLoop.isNil:
190+
await disco.pruneExpiredAdsLoop.cancelAndWait()
191191
disco.pruneExpiredAdsLoop = nil
192192

193-
if not disco.refreshServiceTablesLoop.isNil():
194-
disco.refreshServiceTablesLoop.cancelSoon()
193+
if not disco.refreshServiceTablesLoop.isNil:
194+
await disco.refreshServiceTablesLoop.cancelAndWait()
195195
disco.refreshServiceTablesLoop = nil
196196

197-
if not disco.localRegistrationLoop.isNil():
197+
if not disco.localRegistrationLoop.isNil:
198198
await disco.localRegistrationLoop.cancelAndWait()
199199
disco.localRegistrationLoop = nil
200200

0 commit comments

Comments
 (0)