diff options
author | bptato <nincsnevem662@gmail.com> | 2025-03-13 18:59:43 +0100 |
---|---|---|
committer | bptato <nincsnevem662@gmail.com> | 2025-03-13 19:11:06 +0100 |
commit | c7e0c4f634447d9fcf3201a324787f38da661890 (patch) | |
tree | 6a8176b2be4cd8dadd7d4887762d6425f4461500 /src/local | |
parent | 02f69c4da217dd8b06beaaf57d46c20ab9a1ff60 (diff) | |
download | chawan-c7e0c4f634447d9fcf3201a324787f38da661890.tar.gz |
forkserver: simplify & improve process cleanup
Instead of trying to track child pids (which is wrong - a child may die at any time for whatever reason, so we could have ended up murdering some random process that took its place...), just setsid on forkserver start and send SIGTERM to the entire process group on termination. Also removed the loader pid from the FileLoader object, as it is no longer useful.
Diffstat (limited to 'src/local')
-rw-r--r-- | src/local/client.nim | 4 | ||||
-rw-r--r-- | src/local/pager.nim | 8 |
2 files changed, 5 insertions, 7 deletions
diff --git a/src/local/client.nim b/src/local/client.nim index e45d41f5..0918f438 100644 --- a/src/local/client.nim +++ b/src/local/client.nim @@ -162,13 +162,13 @@ proc newClient*(config: Config; forkserver: ForkServer; loaderPid: int; initCAtomFactory() let jsrt = JS_GetRuntime(jsctx) let clientPid = getCurrentProcessId() - let loader = newFileLoader(loaderPid, clientPid, loaderStream) + let loader = newFileLoader(clientPid, loaderStream) let client = Client( jsrt: jsrt, jsctx: jsctx, loader: loader, crypto: Crypto(urandom: urandom), - pager: newPager(config, forkserver, jsctx, warnings, loader), + pager: newPager(config, forkserver, jsctx, warnings, loader, loaderPid), settings: EnvironmentSettings(scripting: smApp) ) client.attrsp = addr client.pager.term.attrs diff --git a/src/local/pager.nim b/src/local/pager.nim index ac78f8bb..13c57f2b 100644 --- a/src/local/pager.nim +++ b/src/local/pager.nim @@ -153,6 +153,7 @@ type lineedit*: LineEdit linemode: LineMode loader*: FileLoader + loaderPid {.jsget.}: int luctx: LUContext menu: Select navDirection {.jsget.}: NavDirection @@ -222,9 +223,6 @@ proc updateReadLine(pager: Pager) template attrs(pager: Pager): WindowAttributes = pager.term.attrs -func loaderPid(pager: Pager): int {.jsfget.} = - return pager.loader.loaderPid - func getRoot(container: Container): Container = var c = container while c.parent != nil: @@ -432,7 +430,7 @@ proc evalJSFree(opaque: RootRef; src, filename: string) = JS_FreeValue(pager.jsctx, pager.evalJS(src, filename)) proc newPager*(config: Config; forkserver: ForkServer; ctx: JSContext; - alerts: seq[string]; loader: FileLoader): Pager = + alerts: seq[string]; loader: FileLoader; loaderPid: int): Pager = let pager = Pager( alive: true, config: config, @@ -444,6 +442,7 @@ proc newPager*(config: Config; forkserver: ForkServer; ctx: JSContext; luctx: LUContext(), exitCode: -1, loader: loader, + loaderPid: loaderPid, cookieJars: newCookieJarMap() ) pager.timeouts = newTimeoutState(pager.jsctx, evalJSFree, pager) @@ -1572,7 +1571,6 @@ proc deleteContainer(pager: Pager; container, setTarget: Container) = pager.unreg.add(container) if container.process != -1: pager.loader.removeCachedItem(container.cacheId) - pager.forkserver.removeChild(container.process) pager.loader.removeClient(container.process) proc discardBuffer(pager: Pager; container = none(Container); |