get rid of unsafeAddr everywhere

This commit is contained in:
Dmitriy Ryajov 2023-09-19 21:54:02 -06:00
parent 14f8c3a71c
commit 7ceccf9a72
No known key found for this signature in database
GPG Key ID: DA8C680CE7C657A4
2 changed files with 32 additions and 24 deletions

View File

@ -50,7 +50,8 @@ proc bindParam(
# to the return from sqlite3_bind_*(). The object and pointer to it
# must remain valid until then. SQLite will then manage the lifetime of
# its private copy."
sqlite3_bind_blob(s, n.cint, unsafeAddr val[0], val.len.cint,
var val = val
sqlite3_bind_blob(s, n.cint, addr val[0], val.len.cint,
SQLITE_TRANSIENT)
else:
sqlite3_bind_null(s, n.cint)

View File

@ -137,10 +137,6 @@ proc signalMonitor[T](ctx: ptr TaskCtx, fut: Future[T]) {.async.} =
proc asyncHasTask(
ctx: ptr TaskCtx[bool],
key: ptr Key) {.async.} =
defer:
if not ctx.isNil:
discard ctx[].signal.fireSync()
if ctx.isNil:
trace "ctx is nil"
return
@ -156,6 +152,10 @@ proc asyncHasTask(
ctx[].res[].ok(res)
proc hasTask(ctx: ptr TaskCtx, key: ptr Key) =
defer:
if not ctx.isNil:
discard ctx[].signal.fireSync()
try:
waitFor asyncHasTask(ctx, key)
except CatchableError as exc:
@ -164,21 +164,18 @@ proc hasTask(ctx: ptr TaskCtx, key: ptr Key) =
method has*(self: ThreadDatastore, key: Key): Future[?!bool] {.async.} =
var
key = key
res = ThreadResult[bool]()
ctx = TaskCtx[bool](
ds: self.ds,
res: addr res)
proc runTask() =
self.tp.spawn hasTask(addr ctx, unsafeAddr key)
self.tp.spawn hasTask(addr ctx, addr key)
return self.dispatchTask(ctx, key.some, runTask)
proc asyncDelTask(ctx: ptr TaskCtx[void], key: ptr Key) {.async.} =
defer:
if not ctx.isNil:
discard ctx[].signal.fireSync()
if ctx.isNil:
trace "ctx is nil"
return
@ -196,6 +193,10 @@ proc asyncDelTask(ctx: ptr TaskCtx[void], key: ptr Key) {.async.} =
return
proc delTask(ctx: ptr TaskCtx, key: ptr Key) =
defer:
if not ctx.isNil:
discard ctx[].signal.fireSync()
try:
waitFor asyncDelTask(ctx, key)
except CatchableError as exc:
@ -206,13 +207,14 @@ method delete*(
self: ThreadDatastore,
key: Key): Future[?!void] {.async.} =
var
key = key
res = ThreadResult[void]()
ctx = TaskCtx[void](
ds: self.ds,
res: addr res)
proc runTask() =
self.tp.spawn delTask(addr ctx, unsafeAddr key)
self.tp.spawn delTask(addr ctx, addr key)
return self.dispatchTask(ctx, key.some, runTask)
@ -231,9 +233,6 @@ proc asyncPutTask(
key: ptr Key,
data: ptr UncheckedArray[byte],
len: int) {.async.} =
defer:
if not ctx.isNil:
discard ctx[].signal.fireSync()
if ctx.isNil:
trace "ctx is nil"
@ -258,6 +257,10 @@ proc putTask(
## run put in a thread task
##
defer:
if not ctx.isNil:
discard ctx[].signal.fireSync()
try:
waitFor asyncPutTask(ctx, key, data, len)
except CatchableError as exc:
@ -269,6 +272,8 @@ method put*(
key: Key,
data: seq[byte]): Future[?!void] {.async.} =
var
key = key
data = data
res = ThreadResult[void]()
ctx = TaskCtx[void](
ds: self.ds,
@ -277,8 +282,8 @@ method put*(
proc runTask() =
self.tp.spawn putTask(
addr ctx,
unsafeAddr key,
makeUncheckedArray(baseAddr data),
addr key,
makeUncheckedArray(addr data[0]),
data.len)
return self.dispatchTask(ctx, key.some, runTask)
@ -296,10 +301,6 @@ method put*(
proc asyncGetTask(
ctx: ptr TaskCtx[DataBuffer],
key: ptr Key) {.async.} =
defer:
if not ctx.isNil:
discard ctx[].signal.fireSync()
if ctx.isNil:
trace "ctx is nil"
return
@ -322,6 +323,10 @@ proc getTask(
## Run get in a thread task
##
defer:
if not ctx.isNil:
discard ctx[].signal.fireSync()
try:
waitFor asyncGetTask(ctx, key)
except CatchableError as exc:
@ -332,13 +337,14 @@ method get*(
self: ThreadDatastore,
key: Key): Future[?!seq[byte]] {.async.} =
var
key = key
res = ThreadResult[DataBuffer]()
ctx = TaskCtx[DataBuffer](
ds: self.ds,
res: addr res)
proc runTask() =
self.tp.spawn getTask(addr ctx, unsafeAddr key)
self.tp.spawn getTask(addr ctx, addr key)
return self.dispatchTask(ctx, key.some, runTask)
@ -351,9 +357,6 @@ method close*(self: ThreadDatastore): Future[?!void] {.async.} =
proc asyncQueryTask(
ctx: ptr TaskCtx,
iter: ptr QueryIter) {.async.} =
defer:
if not ctx.isNil:
discard ctx[].signal.fireSync()
if ctx.isNil or iter.isNil:
trace "ctx is nil"
@ -383,6 +386,10 @@ proc queryTask(
ctx: ptr TaskCtx,
iter: ptr QueryIter) =
defer:
if not ctx.isNil:
discard ctx[].signal.fireSync()
try:
waitFor asyncQueryTask(ctx, iter)
except CatchableError as exc: