From a3cff9861b4c91c8a9494ff35a36057eded1ac99 Mon Sep 17 00:00:00 2001 From: Jaremy Creechley Date: Thu, 24 Aug 2023 21:07:07 -0700 Subject: [PATCH] updates --- datastore/sharedds.nim | 2 +- datastore/threadbackend.nim | 25 +++++++++++++------------ 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/datastore/sharedds.nim b/datastore/sharedds.nim index 941fe14..213c437 100644 --- a/datastore/sharedds.nim +++ b/datastore/sharedds.nim @@ -81,7 +81,7 @@ proc newSharedDataStore*( self = SharedDatastore() res = newThreadResult(ThreadDatastorePtr) - res[].value = newUniquePtr(ThreadDatastore) + res[].value = newSharedPtr(ThreadDatastore) res[].signal = ThreadSignalPtr.new().valueOr: return failure newException(DatastoreError, "error creating signal") diff --git a/datastore/threadbackend.nim b/datastore/threadbackend.nim index 89385e7..760322b 100644 --- a/datastore/threadbackend.nim +++ b/datastore/threadbackend.nim @@ -32,6 +32,7 @@ type TResult*[T] = SharedPtr[ThreadResult[T]] ThreadBackendKind* {.pure.} = enum + NoBackend TestBackend FSBackend SQliteBackend @@ -47,20 +48,20 @@ type discard of TestBackend: count*: int + of NoBackend: + discard ThreadDatastore* = object tp: Taskpool backendDatastore: ThreadBackendKind - ThreadDatastorePtr* = UniquePtr[ThreadDatastore] + ThreadDatastorePtr* = SharedPtr[ThreadDatastore] Test* = object - count*: int + count*: ThreadBackendKind TestPtr* = SharedPtr[Test] -var fsBackend {.threadvar.}: FSDatastore - proc newThreadResult*[T](tp: typedesc[T]): TResult[T] = newSharedPtr(ThreadResult[T]) @@ -70,9 +71,6 @@ proc startupDatastore( count: TestPtr, ) {.raises: [].} = ## starts up a FS instance on a give thread - var - ret: TResult[ThreadDatastorePtr] - backend: ThreadBackend echo "\n\nstartupDatastore: ret:\n", ret.repr echo "\nstartupDatastore: backend:\n", backend.repr @@ -88,13 +86,15 @@ proc startupDatastore( ignoreProtected = backend.ignoreProtected ) if ds.isOk: - fsBackend = ds.get() + # ret[].value[].backendDatastore = ds.get() ret[].state = Success else: ret[].state = Error - ret[].error = newException(DatastoreError, "error creating signal").toBuffer() + # ret[].value[].backendDatastore = ds.get() + ret[].state = Success of TestBackend: echo "startupDatastore: TestBackend" + ret[].value[].backendDatastore = TestBackend ret[].state = Success else: discard @@ -119,16 +119,17 @@ proc putTask*( discard proc createThreadDatastore*( - ret: TResult[ThreadDatastorePtr], + ret: var TResult[ThreadDatastorePtr], backend: ThreadBackend, ) = try: echo "createThreadDatastore: start" ret[].value[].tp = Taskpool.new(num_threads = 2) - echo "\n\ncreateThreadDatastore:tp:\n", ret[].repr + # echo "\n\ncreateThreadDatastore:tp:\n", ret[].repr + echo "\n\ncreateThreadDatastore:value:\n", ret[].value.repr ret[].value[].tp.spawn startupDatastore( - ret, backend, newSharedPtr(Test(count: 22))) + ret, backend, newSharedPtr(Test(count: FSBackend))) echo "createThreadDatastore: done" ret[].state = Success