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