From 72d193e852d4f35b5a31919b8626f53810c5de08 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 31 Dec 2020 10:38:26 +0530 Subject: [PATCH] Fix python3.7 fork registration not working --- kitty/child.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/kitty/child.c b/kitty/child.c index b539bbca0..500e91dab 100644 --- a/kitty/child.c +++ b/kitty/child.c @@ -78,10 +78,16 @@ spawn(PyObject *self UNUSED, PyObject *args) { char **argv = serialize_string_tuple(argv_p); char **env = serialize_string_tuple(env_p); +#if PY_VERSION_HEX >= 0x03070000 + PyOS_BeforeFork(); +#endif pid_t pid = fork(); switch(pid) { case 0: { // child +#if PY_VERSION_HEX >= 0x03070000 + PyOS_AfterFork_Child(); +#endif sigset_t signals = {0}; struct sigaction act = {.sa_handler=SIG_DFL}; #define SA(which) { if (sigaction(which, &act, NULL) != 0) exit_on_err("sigaction() in child process failed"); } @@ -138,10 +144,19 @@ spawn(PyObject *self UNUSED, PyObject *args) { exit(EXIT_FAILURE); break; } - case -1: + case -1: { +#if PY_VERSION_HEX >= 0x03070000 + int saved_errno = errno; + PyOS_AfterFork_Parent(); + errno = saved_errno; +#endif PyErr_SetFromErrno(PyExc_OSError); break; + } default: +#if PY_VERSION_HEX >= 0x03070000 + PyOS_AfterFork_Parent(); +#endif break; } #undef exit_on_err