diff options
author | bptato <nincsnevem662@gmail.com> | 2025-03-14 17:53:48 +0100 |
---|---|---|
committer | bptato <nincsnevem662@gmail.com> | 2025-03-14 17:53:48 +0100 |
commit | 4a79d029f5753bbbdd28b735327cdabd724c356d (patch) | |
tree | 76ce9b01de76842997bbe3a875a83e07d0c4e395 /src/local | |
parent | c7e0c4f634447d9fcf3201a324787f38da661890 (diff) | |
download | chawan-4a79d029f5753bbbdd28b735327cdabd724c356d.tar.gz |
forkserver: clean up, do not panic on forkBuffer failure
I've removed the SIGINT trap because the fork server is now in a separate process group than the main process anyway. We'll see if this actually works... Also realized we weren't closing the fork server's control stream on fork; now we do.
Diffstat (limited to 'src/local')
-rw-r--r-- | src/local/pager.nim | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/src/local/pager.nim b/src/local/pager.nim index 13c57f2b..737a13ac 100644 --- a/src/local/pager.nim +++ b/src/local/pager.nim @@ -2690,19 +2690,23 @@ proc connected2(pager: Pager; container: Container; res: MailcapResult; url = newURL(url) url.username = "" url.password = "" - let (pid, fd) = pager.forkserver.forkBuffer( + let (pid, cstream) = pager.forkserver.forkBuffer( container.config, url, attrs, cmfHTML in res.flags, container.charsetStack ) - container.process = pid - if container.replace != nil: - pager.deleteContainer(container.replace, container.find(ndAny)) - container.replace = nil - pager.connected3(container, newSocketStream(fd), res.ostream, - response.outputId, res.ostreamOutputId, cmfRedirected in res.flags) + if pid == -1: + res.ostream.sclose() + pager.fail(container, "Error forking new process for buffer") + else: + container.process = pid + if container.replace != nil: + pager.deleteContainer(container.replace, container.find(ndAny)) + container.replace = nil + pager.connected3(container, cstream, res.ostream, response.outputId, + res.ostreamOutputId, cmfRedirected in res.flags) else: dec pager.numload pager.deleteContainer(container, container.find(ndAny)) |