mirror of
https://github.com/logos-storage/nim-datastore.git
synced 2026-01-02 13:43:11 +00:00
who's copying this guy?
This commit is contained in:
parent
61461c9413
commit
850a1b7b7a
@ -90,7 +90,9 @@ method put*(
|
||||
echoed "put new request thr: ", $getThreadId()
|
||||
var ret = await newThreadResult(void)
|
||||
|
||||
try:
|
||||
var answer: ?!void
|
||||
|
||||
block:
|
||||
put(ret, self.tds, key, data)
|
||||
echo "\n"
|
||||
echoed "wait put thr: ", $getThreadId()
|
||||
@ -100,12 +102,15 @@ method put*(
|
||||
echo "\n"
|
||||
await sleepAsync(400.milliseconds)
|
||||
|
||||
return ret.convert(void)
|
||||
finally:
|
||||
answer = ret.convert(void)
|
||||
block:
|
||||
echo "\n"
|
||||
await sleepAsync(400.milliseconds)
|
||||
echoed "PUT RELEASE"
|
||||
echo "PUT RELEASE"
|
||||
ret.release()
|
||||
|
||||
return answer
|
||||
|
||||
method put*(
|
||||
self: ThreadProxyDatastore,
|
||||
|
||||
@ -69,7 +69,7 @@ proc decr*[T](x: var SharedPtr[T]) =
|
||||
else:
|
||||
echoed "SharedPtr: decr: ", x.container.pointer.repr, " cnt: ", x.container.cnt, " tp: ", $(typeof(T))
|
||||
|
||||
proc release*[T](x: var SharedPtr[T]) =
|
||||
template release*[T](x: var SharedPtr[T]) =
|
||||
echoed "SharedPtr: release: ", $(typeof(T))
|
||||
x.decr()
|
||||
x.container = nil
|
||||
@ -80,7 +80,8 @@ proc `=destroy`*[T](x: var SharedPtr[T]) =
|
||||
decr(x)
|
||||
|
||||
proc `=dup`*[T](src: SharedPtr[T]): SharedPtr[T] =
|
||||
if src.container != nil and src.cnt != nil:
|
||||
if src.container != nil:
|
||||
echoed "SharedPtr: dup: ", src.container.pointer.repr, " cnt: ", src.container.cnt, " tp: ", $(typeof(T))
|
||||
discard atomicAddFetch(src.cnt, 1, ATOMIC_RELAXED)
|
||||
result.container = src.container
|
||||
result.cnt = src.cnt
|
||||
@ -88,8 +89,8 @@ proc `=dup`*[T](src: SharedPtr[T]): SharedPtr[T] =
|
||||
proc `=copy`*[T](dest: var SharedPtr[T], src: SharedPtr[T]) =
|
||||
if src.container != nil:
|
||||
# echo "SharedPtr: copy: ", src.container.pointer.repr
|
||||
echoed "SharedPtr: copy:src: ", src.container.pointer.repr, " cnt: ", src.container.cnt, " tp: ", $(typeof(T))
|
||||
discard atomicAddFetch(addr src.container.cnt, 1, ATOMIC_RELAXED)
|
||||
echoed "SharedPtr: copy:src: ", src.container.pointer.repr, " cnt: ", src.container.cnt, " tp: ", $(typeof(T))
|
||||
if dest.container != nil:
|
||||
echoed "SharedPtr: copy:dest: ", dest.container.pointer.repr, " cnt: ", dest.container.cnt, " tp: ", $(typeof(T))
|
||||
`=destroy`(dest)
|
||||
|
||||
@ -150,7 +150,7 @@ proc putTask*(
|
||||
echoed "putTask: FINISH\n"
|
||||
|
||||
proc put*(
|
||||
ret: TResult[void],
|
||||
ret: var TResult[void],
|
||||
tds: ThreadDatastorePtr,
|
||||
key: Key,
|
||||
data: seq[byte]
|
||||
|
||||
@ -61,6 +61,12 @@ proc newThreadResult*[T](
|
||||
res[].sig = await SharedSignal.new()
|
||||
res
|
||||
|
||||
proc `=destroy`*[T](res: var ThreadResult[T]) {.raises: [].} =
|
||||
## release TResult and it's ThreadSignal
|
||||
echoed "ThreadResult:destroy: ", res.addr.pointer.repr, " res: ", $(res)
|
||||
res[].signal.release()
|
||||
`=destroy`(res.results)
|
||||
|
||||
# proc release*[T](res: var TResult[T]) {.raises: [].} =
|
||||
# ## release TResult and it's ThreadSignal
|
||||
# # res[].signal.release()
|
||||
@ -71,17 +77,17 @@ template wait*[T](res: TResult[T]): Future[void] =
|
||||
template fireSync*[T](res: TResult[T]): Result[bool, string] =
|
||||
res[].sig.fireSync()
|
||||
|
||||
template success*[T](ret: TResult[T], value: T) =
|
||||
proc success*[T](ret: TResult[T], value: T) =
|
||||
## convenience wrapper for `TResult` to replicate
|
||||
## normal questionable api
|
||||
ret[].results.ok(value)
|
||||
|
||||
template success*[T: void](ret: TResult[T]) =
|
||||
proc success*[T: void](ret: TResult[T]) =
|
||||
## convenience wrapper for `TResult` to replicate
|
||||
## normal questionable api
|
||||
ret[].results.ok()
|
||||
|
||||
template failure*[T](ret: TResult[T], exc: ref Exception) =
|
||||
proc failure*[T](ret: TResult[T], exc: ref Exception) =
|
||||
## convenience wrapper for `TResult` to replicate
|
||||
## normal questionable api
|
||||
ret[].results.err(exc.toBuffer())
|
||||
@ -97,6 +103,7 @@ proc convert*[T, S](ret: TResult[T],
|
||||
elif S is string:
|
||||
result.ok(ret[].results.get().toString())
|
||||
elif S is void:
|
||||
echoed "TRESULT: OK"
|
||||
result.ok()
|
||||
else:
|
||||
result.ok(ret[].results.get())
|
||||
|
||||
@ -37,8 +37,8 @@ proc threadTest() =
|
||||
test "check put":
|
||||
# echo "\n\n=== put ==="
|
||||
let res1 = await sds.put(key1, data)
|
||||
check res1.isOk
|
||||
print "res1: ", res1
|
||||
check res1.isOk
|
||||
# GC_fullCollect()
|
||||
|
||||
proc main() =
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user