diff --git a/leveldbstatic.nim b/leveldbstatic.nim index 11880bf..4cfaf1b 100644 --- a/leveldbstatic.nim +++ b/leveldbstatic.nim @@ -446,6 +446,10 @@ proc next*(iter: LevelDbQueryIter): (string, string) = proc dispose*(iter: LevelDbQueryIter) = iter.dispose(iter[]) +proc `=destroy`(iter: var LevelDbQueryIterObj) = + if iter.dispose != nil: + iter.dispose(iter) + proc closeIter(iter: var LevelDbQueryIterObj, iterPtr: ptr leveldb_iterator_t) = iter.finished = true leveldb_iter_destroy(iterPtr) diff --git a/tests/test.nim b/tests/test.nim index 9799054..864de39 100644 --- a/tests/test.nim +++ b/tests/test.nim @@ -255,6 +255,15 @@ suite "leveldb queryIter": iter.next() == empty iter.finished + test "iterator is disposed when it goes out of scope": + when defined(gcOrc) or defined(gcArc): + block: + let iter = db.queryIter() + discard iter.next() + db.close() # crashes if iterator not disposed + else: + skip() + test "skip": let iter = db.queryIter(skip = 1) check: