asyncdispatch: for NuttX, add destructor to clear global dispatcher. (#21432)

* asyncdispatch: for NuttX, add destructor to clear global dispatcher using atexit().

Signed-off-by: Takeyoshi Kikuchi <kikuchi@centurysys.co.jp>

* std: exitprocs: remove "when defined(nuttx)" block.

Signed-off-by: Takeyoshi Kikuchi <kikuchi@centurysys.co.jp>

---------

Signed-off-by: Takeyoshi Kikuchi <kikuchi@centurysys.co.jp>
This commit is contained in:
Century Systems
2023-02-28 22:38:50 +09:00
committed by GitHub
parent 83e3320725
commit dd629c8f45
2 changed files with 13 additions and 1 deletions

View File

@@ -1216,6 +1216,15 @@ else:
var gDisp{.threadvar.}: owned PDispatcher ## Global dispatcher
when defined(nuttx):
import std/exitprocs
proc cleanDispatcher() {.noconv.} =
gDisp = nil
proc addFinalyzer() =
addExitProc(cleanDispatcher)
proc setGlobalDispatcher*(disp: owned PDispatcher) =
if not gDisp.isNil:
assert gDisp.callbacks.len == 0
@@ -1225,6 +1234,8 @@ else:
proc getGlobalDispatcher*(): PDispatcher =
if gDisp.isNil:
setGlobalDispatcher(newDispatcher())
when defined(nuttx):
addFinalyzer()
result = gDisp
proc getIoHandler*(disp: PDispatcher): Selector[AsyncData] =
@@ -1591,7 +1602,7 @@ else:
owned(Future[tuple[address: string, client: AsyncFD]]) =
var retFuture = newFuture[tuple[address: string,
client: AsyncFD]]("acceptAddr")
proc cb(sock: AsyncFD): bool =
proc cb(sock: AsyncFD): bool {.gcsafe.} =
result = true
var sockAddress: Sockaddr_storage
var addrLen = sizeof(sockAddress).SockLen

View File

@@ -45,6 +45,7 @@ proc callClosures() {.noconv.} =
case fun.kind
of kClosure: fun.fun1()
of kNoconv: fun.fun2()
gFuns.setLen(0)
template fun() =
if gFuns.len == 0: