From e357b4bda80934b55f660d2467fc48dd9b7aaf95 Mon Sep 17 00:00:00 2001 From: gmega Date: Mon, 9 Feb 2026 09:52:58 -0300 Subject: [PATCH] make sure we are actually removing closed iterators from pending set --- datastore/leveldb/leveldbds.nim | 3 +++ tests/datastore/leveldb/testleveldbds.nim | 7 +++++++ 2 files changed, 10 insertions(+) diff --git a/datastore/leveldb/leveldbds.nim b/datastore/leveldb/leveldbds.nim index f78191d..8ceaf8c 100644 --- a/datastore/leveldb/leveldbds.nim +++ b/datastore/leveldb/leveldbds.nim @@ -164,6 +164,9 @@ method modify*( if not lock.locked: self.locks.del(key) +proc openIteratorCount*(self: LevelDbDatastore): int = + self.openIterators.len + proc new*( T: type LevelDbDatastore, dbName: string): ?!T = try: diff --git a/tests/datastore/leveldb/testleveldbds.nim b/tests/datastore/leveldb/testleveldbds.nim index 9b39943..3497d92 100644 --- a/tests/datastore/leveldb/testleveldbds.nim +++ b/tests/datastore/leveldb/testleveldbds.nim @@ -195,3 +195,10 @@ suite "LevelDB Query": let iter = (await ds.query(q)).tryGet (await iter.dispose()).tryGet (await iter.dispose()).tryGet + + test "should stop tracking iterator objects once those are disposed": + let q = Query.init(Key.init("/a/b/c").tryGet) + let iter = (await ds.query(q)).tryGet + check ds.openIteratorCount == 1 + (await iter.dispose()).tryGet + check ds.openIteratorCount == 0