mirror of
https://github.com/logos-storage/nim-datastore.git
synced 2026-01-05 23:23:10 +00:00
try manually counting sharedptr
This commit is contained in:
parent
8a222430a6
commit
ab73d79e7d
@ -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 "
|
||||||
|
|||||||
@ -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: [].} =
|
||||||
|
|||||||
@ -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()
|
||||||
|
|
||||||
|
|||||||
@ -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
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user