mirror of
https://github.com/logos-storage/nim-datastore.git
synced 2026-01-05 15:13:14 +00:00
properly close signal even on cancel
This commit is contained in:
parent
35c4466de0
commit
727f8b6c2a
@ -52,9 +52,12 @@ method get*(
|
||||
without ret =? newThreadResult(DataBuffer), err:
|
||||
return failure(err)
|
||||
|
||||
get(ret, self.tds, key)
|
||||
await wait(ret[].signal)
|
||||
ret[].signal.close()
|
||||
try:
|
||||
get(ret, self.tds, key)
|
||||
await wait(ret[].signal)
|
||||
finally:
|
||||
echo "closing signal"
|
||||
ret[].signal.close()
|
||||
|
||||
echo "\nSharedDataStore:put:value: ", ret[].repr
|
||||
let data = ret[].value.toSeq(byte)
|
||||
@ -70,10 +73,12 @@ method put*(
|
||||
return failure(err)
|
||||
|
||||
echo "res: ", ret
|
||||
put(ret, self.tds, key, data)
|
||||
await wait(ret[].signal)
|
||||
echo "closing signal"
|
||||
ret[].signal.close()
|
||||
try:
|
||||
put(ret, self.tds, key, data)
|
||||
await wait(ret[].signal)
|
||||
finally:
|
||||
echo "closing signal"
|
||||
ret[].signal.close()
|
||||
|
||||
echo "\nSharedDataStore:put:value: ", ret[].repr
|
||||
return success()
|
||||
@ -103,12 +108,14 @@ proc newSharedDataStore*(
|
||||
without res =? newThreadResult(ThreadDatastorePtr), err:
|
||||
return failure(err)
|
||||
|
||||
res[].value = newSharedPtr(ThreadDatastore)
|
||||
|
||||
echo "\nnewDataStore: threadId:", getThreadId()
|
||||
res.createThreadDatastore(backend)
|
||||
await wait(res[].signal)
|
||||
res[].signal.close()
|
||||
try:
|
||||
res[].value = newSharedPtr(ThreadDatastore)
|
||||
echo "\nnewDataStore: threadId:", getThreadId()
|
||||
res.createThreadDatastore(backend)
|
||||
await wait(res[].signal)
|
||||
finally:
|
||||
echo "closing signal"
|
||||
res[].signal.close()
|
||||
|
||||
echo "\nnewSharedDataStore:state: ", res[].state.repr
|
||||
echo "\nnewSharedDataStore:value: ", res[].value[].backend.repr
|
||||
|
||||
@ -68,10 +68,6 @@ var
|
||||
fsDatastore {.threadvar.}: FSDatastore ##\
|
||||
## TODO: figure out a better way to capture this?
|
||||
|
||||
proc `=destroy`*[T](x: var ThreadResult[T]) =
|
||||
when T isnot void:
|
||||
x.value.`=destroy`
|
||||
|
||||
proc newThreadResult*[T](tp: typedesc[T]): Result[TResult[T], ref CatchableError] =
|
||||
let res = newSharedPtr(ThreadResult[T])
|
||||
let signal = ThreadSignalPtr.new()
|
||||
|
||||
@ -31,10 +31,8 @@ suite "Test Basic SharedDatastore":
|
||||
|
||||
echo "\n\n=== put ==="
|
||||
let key1 = Key.init("/a").tryGet
|
||||
# let res1 = await sds.put(key1, "value for 1".toBytes())
|
||||
let res1 = sds.put(key1, "value for 1".toBytes())
|
||||
res1.cancel()
|
||||
echo "res1: ", res1.repr
|
||||
let res1 = await sds.put(key1, "value for 1".toBytes())
|
||||
print "res1: ", res1
|
||||
|
||||
echo "\n\n=== get ==="
|
||||
let res2 = await sds.get(key1)
|
||||
@ -44,6 +42,12 @@ suite "Test Basic SharedDatastore":
|
||||
val &= char(c)
|
||||
print "get res2: ", $val
|
||||
|
||||
echo "\n\n=== put cancel ==="
|
||||
# let res1 = await sds.put(key1, "value for 1".toBytes())
|
||||
let res3 = sds.put(key1, "value for 1".toBytes())
|
||||
res3.cancel()
|
||||
# print "res3: ", res3
|
||||
|
||||
# suite "Test Basic FSDatastore":
|
||||
# let
|
||||
# path = currentSourcePath() # get this file's name
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user