try manually counting sharedptr

This commit is contained in:
Jaremy Creechley 2023-09-14 15:16:09 -07:00
parent 8a222430a6
commit ab73d79e7d
No known key found for this signature in database
GPG Key ID: 4E66FB67B21D3300
4 changed files with 9 additions and 5 deletions

View File

@ -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 "

View File

@ -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: [].} =

View File

@ -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()

View File

@ -122,5 +122,6 @@ suite "Share buffer test":
check intref[] == 40
b.release()
check intref[] == 0
# TODO: add async test