diff --git a/datastore/threads/threadproxyds.nim b/datastore/threads/threadproxyds.nim index 422c548..e273e06 100644 --- a/datastore/threads/threadproxyds.nim +++ b/datastore/threads/threadproxyds.nim @@ -41,6 +41,7 @@ type signal: ThreadSignalPtr running: bool ## used to mark when a task worker is running cancelled: bool ## used to cancel a task before it's started + nextSignal: (Lock, Cond) TaskCtx*[T] = SharedPtr[TaskCtxObj[T]] ## Task context object. @@ -72,6 +73,13 @@ proc setDone[T](ctx: TaskCtx[T]) = # withLock(ctxLock): ctx[].running = false +proc waitSync*(sig: var (Lock, Cond)) = + withLock(sig[0]): + wait(sig[1], sig[0]) +proc fireSync*(sig: var (Lock, Cond)) = + withLock(sig[0]): + signal(sig[1]) + proc acquireSignal(): ?!ThreadSignalPtr = let signal = ThreadSignalPtr.new() if signal.isErr(): diff --git a/tests/datastore/testthreadproxyds.nim b/tests/datastore/testthreadproxyds.nim index 000c52d..57fea88 100644 --- a/tests/datastore/testthreadproxyds.nim +++ b/tests/datastore/testthreadproxyds.nim @@ -24,7 +24,7 @@ import ./querycommontests const NumThreads = 20 # IO threads aren't attached to CPU count - ThreadTestLoops {.intdefine.} = 10 + ThreadTestLoops {.intdefine.} = 100 N = ThreadTestLoops for i in 1..N: