From aa01665c16d74de6b193334b4e9cbe3b07a59779 Mon Sep 17 00:00:00 2001 From: Jaremy Creechley Date: Fri, 25 Aug 2023 14:46:29 -0700 Subject: [PATCH] switching up errors --- datastore/sharedds.nim | 31 +++++++++++++++++-------------- datastore/threadbackend.nim | 6 +++++- 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/datastore/sharedds.nim b/datastore/sharedds.nim index 8cc0d0a..2ab30ff 100644 --- a/datastore/sharedds.nim +++ b/datastore/sharedds.nim @@ -49,15 +49,15 @@ method get*( key: Key ): Future[?!seq[byte]] {.async.} = - var res = ?newThreadResult(DataBuffer) - echo "res: ", res + without ret =? newThreadResult(DataBuffer), err: + return failure(err) - get(res, self.tds, key) - await wait(res[].signal) - res[].signal.close() + get(ret, self.tds, key) + await wait(ret[].signal) + ret[].signal.close() - echo "\nSharedDataStore:put:value: ", res[].repr - let data = res[].value.toSeq(byte) + echo "\nSharedDataStore:put:value: ", ret[].repr + let data = ret[].value.toSeq(byte) return success(data) method put*( @@ -66,15 +66,16 @@ method put*( data: seq[byte] ): Future[?!void] {.async.} = - var res = ?newThreadResult(void) + without ret =? newThreadResult(void), err: + return failure(err) - echo "res: ", res - put(res, self.tds, key, data) - await wait(res[].signal) + echo "res: ", ret + put(ret, self.tds, key, data) + await wait(ret[].signal) echo "closing signal" - res[].signal.close() + ret[].signal.close() - echo "\nSharedDataStore:put:value: ", res[].repr + echo "\nSharedDataStore:put:value: ", ret[].repr return success() @@ -98,7 +99,9 @@ proc newSharedDataStore*( var self = SharedDatastore() - res = ?newThreadResult(ThreadDatastorePtr) + + without res =? newThreadResult(ThreadDatastorePtr), err: + return failure(err) res[].value = newSharedPtr(ThreadDatastore) res[].signal = ThreadSignalPtr.new().valueOr: diff --git a/datastore/threadbackend.nim b/datastore/threadbackend.nim index acc2470..e3ef064 100644 --- a/datastore/threadbackend.nim +++ b/datastore/threadbackend.nim @@ -68,6 +68,10 @@ 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() @@ -170,7 +174,7 @@ proc put*( tds[].tp.spawn putTask(ret, tds[].backend, bkey, bval) proc createThreadDatastore*( - ret: var TResult[ThreadDatastorePtr], + ret: TResult[ThreadDatastorePtr], backend: ThreadBackend, ) =