mirror of
https://github.com/logos-storage/nim-datastore.git
synced 2026-01-07 16:13:07 +00:00
fix occasional deadlock
This commit is contained in:
parent
317d42c511
commit
dacc28ab02
@ -245,6 +245,8 @@ method close*(self: ThreadDatastore): Future[?!void] {.async.} =
|
|||||||
type
|
type
|
||||||
QResult = DbQueryResponse[KeyId, DataBuffer]
|
QResult = DbQueryResponse[KeyId, DataBuffer]
|
||||||
|
|
||||||
|
import os
|
||||||
|
|
||||||
proc queryTask[DB](
|
proc queryTask[DB](
|
||||||
ctx: TaskCtx[QResult],
|
ctx: TaskCtx[QResult],
|
||||||
ds: DB,
|
ds: DB,
|
||||||
@ -265,6 +267,8 @@ proc queryTask[DB](
|
|||||||
ctx[].res.ok (KeyId.none, DataBuffer(), )
|
ctx[].res.ok (KeyId.none, DataBuffer(), )
|
||||||
echo "\tqueryTask:query:fireSync "
|
echo "\tqueryTask:query:fireSync "
|
||||||
discard ctx[].signal.fireSync()
|
discard ctx[].signal.fireSync()
|
||||||
|
echo "\tqueryTask:query:nextSignal:wait "
|
||||||
|
discard nextSignal.waitSync().get()
|
||||||
|
|
||||||
var handle = handleRes.get()
|
var handle = handleRes.get()
|
||||||
for item in handle.iter():
|
for item in handle.iter():
|
||||||
@ -314,6 +318,10 @@ method query*(
|
|||||||
echo "query:init:dispatch:queryTask"
|
echo "query:init:dispatch:queryTask"
|
||||||
self.tp.spawn queryTask(ctx, ds, query, nextSignal)
|
self.tp.spawn queryTask(ctx, ds, query, nextSignal)
|
||||||
|
|
||||||
|
# await wait(ctx[].signal)
|
||||||
|
await nextSignal.fire()
|
||||||
|
# await wait(ctx[].signal)
|
||||||
|
|
||||||
echo "query:init:dispatch:res: ", ctx[].res
|
echo "query:init:dispatch:res: ", ctx[].res
|
||||||
|
|
||||||
var
|
var
|
||||||
@ -328,9 +336,6 @@ method query*(
|
|||||||
proc next(): Future[?!QueryResponse] {.async.} =
|
proc next(): Future[?!QueryResponse] {.async.} =
|
||||||
echo "\n\nquery:next:exec: "
|
echo "\n\nquery:next:exec: "
|
||||||
let ctx = ctx
|
let ctx = ctx
|
||||||
# defer:
|
|
||||||
# if lock.locked:
|
|
||||||
# lock.release()
|
|
||||||
|
|
||||||
trace "About to query"
|
trace "About to query"
|
||||||
if lock.locked:
|
if lock.locked:
|
||||||
@ -340,9 +345,6 @@ method query*(
|
|||||||
echo "query:next:iter:finished"
|
echo "query:next:iter:finished"
|
||||||
return failure (ref QueryEndedError)(msg: "Calling next on a finished query!")
|
return failure (ref QueryEndedError)(msg: "Calling next on a finished query!")
|
||||||
|
|
||||||
# echo "query:next:acquire:lock"
|
|
||||||
# await lock.acquire()
|
|
||||||
|
|
||||||
echo "query:next:wait:signal"
|
echo "query:next:wait:signal"
|
||||||
await wait(ctx[].signal)
|
await wait(ctx[].signal)
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user