makes sure that a key on subscriptionMapping exists before trying to access it

This commit is contained in:
Marcin Czenko 2024-11-27 22:57:51 +01:00
parent d88e4614b1
commit 4642545309
2 changed files with 22 additions and 12 deletions

View File

@ -285,6 +285,7 @@ method unsubscribe*(subscriptions: PollingSubscriptions,
{.async.} =
subscriptions.logFilters.del(id)
subscriptions.callbacks.del(id)
if subscriptions.subscriptionMapping.hasKey(id):
let sub = subscriptions.subscriptionMapping[id]
subscriptions.subscriptionMapping.del(id)
try:

View File

@ -50,6 +50,15 @@ template subscriptionTests(subscriptions, client) =
await sleepAsync(100.millis)
check count == 0
test "unsubscribing from a non-existent subscription does not do any harm":
await subscriptions.unsubscribe(newJInt(0))
test "duplicate unsubscribe is harmless":
proc callback(blck: Block) = discard
let subscription = await subscriptions.subscribeBlocks(callback)
await subscriptions.unsubscribe(subscription)
await subscriptions.unsubscribe(subscription)
test "stops listening to new blocks when provider is closed":
var count = 0
proc callback(blck: ?!Block) =