From 738c6a87e2137886af55d8706bfc4761d3d87f5c Mon Sep 17 00:00:00 2001 From: Mark Spanbroek Date: Tue, 27 Jun 2023 16:45:38 +0200 Subject: [PATCH] Stop polling when provider is closed --- ethers/providers/jsonrpc/subscriptions.nim | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/ethers/providers/jsonrpc/subscriptions.nim b/ethers/providers/jsonrpc/subscriptions.nim index 88cfe18..f74e3e3 100644 --- a/ethers/providers/jsonrpc/subscriptions.nim +++ b/ethers/providers/jsonrpc/subscriptions.nim @@ -35,7 +35,7 @@ method unsubscribe(subscriptions: JsonRpcSubscriptions, {.async, base.} = raiseAssert "not implemented" -method close*(subscriptions: JsonRpcSubscriptions) {.async.} = +method close*(subscriptions: JsonRpcSubscriptions) {.async, base.} = let ids = toSeq subscriptions.callbacks.keys for id in ids: await subscriptions.unsubscribe(id) @@ -103,6 +103,7 @@ method unsubscribe(subscriptions: WebSocketSubscriptions, type PollingSubscriptions = ref object of JsonRpcSubscriptions + polling: Future[void] proc new*(_: type JsonRpcSubscriptions, client: RpcHttpClient, @@ -127,10 +128,13 @@ proc new*(_: type JsonRpcSubscriptions, await poll(id) await sleepAsync(pollingInterval) - asyncSpawn poll() - + subscriptions.polling = poll() subscriptions +method close*(subscriptions: PollingSubscriptions) {.async.} = + await subscriptions.polling.cancelAndWait() + await procCall JsonRpcSubscriptions(subscriptions).close() + method subscribeBlocks(subscriptions: PollingSubscriptions, onBlock: BlockHandler): Future[JsonRpcSubscription]