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() echoed "put request args: ", $getThreadId()
var putRes = newFuture[?!void]("threadbackend.put(tds, key, data)") var putRes = newFuture[?!void]("threadbackend.put(tds, key, data)")
let sigFut = SharedSignal.new() let sigFut = SharedSignal.new(2)
sigFut. sigFut.
then(proc (sig: SharedSignal) = then(proc (sig: SharedSignal) =
@ -179,6 +179,7 @@ proc put*(
wait(sig). wait(sig).
then(proc () = then(proc () =
sig.decr()
echo "\n" echo "\n"
os.sleep(400) os.sleep(400)
echoed "put request done " echoed "put request done "

View File

@ -58,7 +58,7 @@ proc newThreadResult*[T](
{.error: "only thread safe types can be used".} {.error: "only thread safe types can be used".}
let res = newSharedPtr(ThreadResult[T]) let res = newSharedPtr(ThreadResult[T])
res[].sig = await SharedSignal.new() res[].sig = await SharedSignal.new(0)
res res
proc `=destroy`*[T](res: var ThreadResult[T]) {.raises: [].} = proc `=destroy`*[T](res: var ThreadResult[T]) {.raises: [].} =

View File

@ -90,8 +90,9 @@ proc `=destroy`*[T](x: var SharedSignalObj) =
release(x.sigptr) release(x.sigptr)
x.sigptr = nil x.sigptr = nil
proc new*(tp: typedesc[SharedSignal]): Future[SharedSignal] {.async.} = proc new*(tp: typedesc[SharedSignal],
result = newSharedPtr[SharedSignalObj](SharedSignalObj) count: int): Future[SharedSignal] {.async.} =
result = newSharedPtr[SharedSignalObj](SharedSignalObj, manualCount = count)
result[].sigptr = await getThreadSignal() result[].sigptr = await getThreadSignal()
proc wait*(sig: SharedSignal): Future[void] = proc wait*(sig: SharedSignal): Future[void] =
@ -99,3 +100,4 @@ proc wait*(sig: SharedSignal): Future[void] =
proc fireSync*(sig: SharedSignal): Result[bool, string] = proc fireSync*(sig: SharedSignal): Result[bool, string] =
sig[].sigptr.fireSync() sig[].sigptr.fireSync()

View File

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