mirror of
https://github.com/logos-messaging/nim-sds.git
synced 2026-02-16 12:03:07 +00:00
Use fixed array of contexts instead of seq
This is a temporary solution until we can properly perform a safe graceful shutdown in nim-chronos.
This commit is contained in:
parent
fb8039c5a5
commit
37dd61caa0
@ -57,28 +57,37 @@ template callEventCallback(ctx: ptr SdsContext, eventName: string, body: untyped
|
||||
RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg)), ctx[].eventUserData
|
||||
)
|
||||
|
||||
const MaxNumContexts = 32
|
||||
var
|
||||
ctxPool: seq[ptr SdsContext]
|
||||
ctxPool: array[MaxNumContexts, ptr SdsContext]
|
||||
ctxPoolLock: Lock
|
||||
|
||||
proc acquireCtx(callback: SdsCallBack, userData: pointer): ptr SdsContext =
|
||||
ctxPoolLock.acquire()
|
||||
defer: ctxPoolLock.release()
|
||||
if ctxPool.len > 0:
|
||||
result = ctxPool.pop()
|
||||
else:
|
||||
result = sds_thread.createSdsThread().valueOr:
|
||||
let msg = "Error in createSdsThread: " & $error
|
||||
callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg)), userData)
|
||||
return nil
|
||||
|
||||
for i in 0 ..< ctxPool.len:
|
||||
if ctxPool[i] == nil:
|
||||
ctxPool[i] = sds_thread.createSdsThread().valueOr:
|
||||
let msg = "Error in createSdsThread: " & $error
|
||||
callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg)), userData)
|
||||
return nil
|
||||
return ctxPool[i]
|
||||
|
||||
let msg = "Cannot acquire more contexts than maximum of: " & $MaxNumContexts
|
||||
callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg)), userData)
|
||||
return nil
|
||||
|
||||
proc releaseCtx(ctx: ptr SdsContext) =
|
||||
ctxPoolLock.acquire()
|
||||
defer: ctxPoolLock.release()
|
||||
ctx.userData = nil
|
||||
ctx.eventCallback = nil
|
||||
ctx.eventUserData = nil
|
||||
ctxPool.add(ctx)
|
||||
for i in 0 ..< ctxPool.len:
|
||||
if ctxPool[i] == ctx:
|
||||
ctxPool[i].userData = nil
|
||||
ctxPool[i].eventCallback = nil
|
||||
ctxPool[i].eventUserData = nil
|
||||
ctxPool[i] = nil
|
||||
break
|
||||
|
||||
proc handleRequest(
|
||||
ctx: ptr SdsContext,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user