sweet, defect works

This commit is contained in:
Jaremy Creechley 2023-09-05 16:24:33 -07:00
parent 8b72f83995
commit 3e0d5c91c1
No known key found for this signature in database
GPG Key ID: 4E66FB67B21D3300
2 changed files with 8 additions and 7 deletions

View File

@ -34,7 +34,7 @@ method has*(
has(ret, self.tds, key) has(ret, self.tds, key)
await wait(ret[].signal) await wait(ret[].signal)
finally: finally:
ret[].signal.release() ret[].signal.close()
return ret.convert(bool) return ret.convert(bool)
@ -49,7 +49,7 @@ method delete*(
delete(ret, self.tds, key) delete(ret, self.tds, key)
await wait(ret[].signal) await wait(ret[].signal)
finally: finally:
ret[].signal.release() ret[].signal.close()
return ret.convert(void) return ret.convert(void)
@ -80,7 +80,7 @@ method get*(
get(ret, self.tds, key) get(ret, self.tds, key)
await wait(ret[].signal) await wait(ret[].signal)
finally: finally:
ret[].signal.release() ret[].signal.close()
return ret.convert(seq[byte]) return ret.convert(seq[byte])
@ -96,7 +96,7 @@ method put*(
put(ret, self.tds, key, data) put(ret, self.tds, key, data)
await wait(ret[].signal) await wait(ret[].signal)
finally: finally:
ret[].signal.release() ret[].signal.close()
return ret.convert(void) return ret.convert(void)
@ -155,7 +155,7 @@ method query*(
proc dispose(): Future[?!void] {.async.} = proc dispose(): Future[?!void] {.async.} =
iter[].it = nil # ensure our sharedptr doesn't try and dealloc iter[].it = nil # ensure our sharedptr doesn't try and dealloc
ret[].signal.release() ret[].signal.close()
return success() return success()
iterWrapper.next = next iterWrapper.next = next

View File

@ -38,8 +38,8 @@ type
## result in likely memory corruption (use-after-free). ## result in likely memory corruption (use-after-free).
const const
SignalPoolSize {.intdefine.} = 1024 SignalPoolSize {.intdefine.} = 20
SignalPoolRetries {.intdefine.} = 1_000 SignalPoolRetries {.intdefine.} = 10
var var
signalPoolLock: Lock signalPoolLock: Lock
@ -84,6 +84,7 @@ proc getThreadSignal*(): Future[ThreadSignalPtr] {.async, raises: [].} =
discard discard
finally: finally:
signalPoolLock.release() signalPoolLock.release()
echo "wait:signalPoolUsed: "
await sleepAsync(10.milliseconds) await sleepAsync(10.milliseconds)
raise newException(DeadThreadDefect, "reached limit trying to acquire a ThreadSignalPtr") raise newException(DeadThreadDefect, "reached limit trying to acquire a ThreadSignalPtr")