diff --git a/datastore/threadproxyds.nim b/datastore/threadproxyds.nim index f82d0a2..df975ee 100644 --- a/datastore/threadproxyds.nim +++ b/datastore/threadproxyds.nim @@ -185,8 +185,10 @@ method close*( if self.tds[].tp != nil: ## this can block... how to handle? maybe just leak? self.tds[].tp.shutdown() + self[].tds[].tp = nil # ensure our sharedptr doesn't try and dealloc self[].tds[].ds = nil # ensure our sharedptr doesn't try and dealloc + # self.tds.release() proc newThreadProxyDatastore*( ds: Datastore, diff --git a/datastore/threads/sharedptr.nim b/datastore/threads/sharedptr.nim index cb05318..9d4d335 100644 --- a/datastore/threads/sharedptr.nim +++ b/datastore/threads/sharedptr.nim @@ -62,6 +62,8 @@ proc decr*[T](x: var SharedPtr[T]) = when compiles(`=destroy`(x[])): echoed "SharedPtr:call:child:destructor: ", $(typeof(x[])) `=destroy`(x[]) + else: + echoed "SharedPtr:NOT CALLED:child:destructor: ", $(typeof(x[])) deallocShared(x.container) x.container = nil else: diff --git a/tests/datastore/testthreadproxyds.nim b/tests/datastore/testthreadproxyds.nim index 17999f9..4d6bd89 100644 --- a/tests/datastore/testthreadproxyds.nim +++ b/tests/datastore/testthreadproxyds.nim @@ -29,20 +29,24 @@ proc threadTest() = sds = newThreadProxyDatastore(mem).expect("should work") key1 = Key.init("/a").tryGet data = "value for 1".toBytes() + + teardownAll: + let res = await sds.close() + res.get() test "check put": # echo "\n\n=== put ===" let res1 = await sds.put(key1, data) check res1.isOk print "res1: ", res1 - GC_fullCollect() + # GC_fullCollect() -proc main9) = +proc main() = threadTest() - GC_fullCollect() + # GC_fullCollect() main() -GC_fullCollect() +# GC_fullCollect() # test "check get":