who's copying this guy?

This commit is contained in:
Jaremy Creechley 2023-09-13 15:07:13 -07:00
parent 61461c9413
commit 850a1b7b7a
No known key found for this signature in database
GPG Key ID: 4E66FB67B21D3300
5 changed files with 24 additions and 11 deletions

View File

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

View File

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

View File

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

View File

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

View File

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