From ab73d79e7da177d9e17ca67d66d302f3e6ac8e1f Mon Sep 17 00:00:00 2001 From: Jaremy Creechley Date: Thu, 14 Sep 2023 15:16:09 -0700 Subject: [PATCH] try manually counting sharedptr --- datastore/threads/threadbackend.nim | 3 ++- datastore/threads/threadresults.nim | 2 +- datastore/threads/threadsignalpool.nim | 6 ++++-- tests/datastore/testsharedptr.nim | 3 ++- 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/datastore/threads/threadbackend.nim b/datastore/threads/threadbackend.nim index 70cae29..5e20335 100644 --- a/datastore/threads/threadbackend.nim +++ b/datastore/threads/threadbackend.nim @@ -161,7 +161,7 @@ proc put*( echoed "put request args: ", $getThreadId() var putRes = newFuture[?!void]("threadbackend.put(tds, key, data)") - let sigFut = SharedSignal.new() + let sigFut = SharedSignal.new(2) sigFut. then(proc (sig: SharedSignal) = @@ -179,6 +179,7 @@ proc put*( wait(sig). then(proc () = + sig.decr() echo "\n" os.sleep(400) echoed "put request done " diff --git a/datastore/threads/threadresults.nim b/datastore/threads/threadresults.nim index f24fa43..496b68d 100644 --- a/datastore/threads/threadresults.nim +++ b/datastore/threads/threadresults.nim @@ -58,7 +58,7 @@ proc newThreadResult*[T]( {.error: "only thread safe types can be used".} let res = newSharedPtr(ThreadResult[T]) - res[].sig = await SharedSignal.new() + res[].sig = await SharedSignal.new(0) res proc `=destroy`*[T](res: var ThreadResult[T]) {.raises: [].} = diff --git a/datastore/threads/threadsignalpool.nim b/datastore/threads/threadsignalpool.nim index 57a8d38..b3e713a 100644 --- a/datastore/threads/threadsignalpool.nim +++ b/datastore/threads/threadsignalpool.nim @@ -90,8 +90,9 @@ proc `=destroy`*[T](x: var SharedSignalObj) = release(x.sigptr) x.sigptr = nil -proc new*(tp: typedesc[SharedSignal]): Future[SharedSignal] {.async.} = - result = newSharedPtr[SharedSignalObj](SharedSignalObj) +proc new*(tp: typedesc[SharedSignal], + count: int): Future[SharedSignal] {.async.} = + result = newSharedPtr[SharedSignalObj](SharedSignalObj, manualCount = count) result[].sigptr = await getThreadSignal() proc wait*(sig: SharedSignal): Future[void] = @@ -99,3 +100,4 @@ proc wait*(sig: SharedSignal): Future[void] = proc fireSync*(sig: SharedSignal): Result[bool, string] = sig[].sigptr.fireSync() + diff --git a/tests/datastore/testsharedptr.nim b/tests/datastore/testsharedptr.nim index d820083..06a78ed 100644 --- a/tests/datastore/testsharedptr.nim +++ b/tests/datastore/testsharedptr.nim @@ -122,5 +122,6 @@ suite "Share buffer test": check intref[] == 40 b.release() check intref[] == 0 - + # TODO: add async test +