aboutsummaryrefslogtreecommitdiffstats
path: root/src/process.c
diff options
context:
space:
mode:
authorAndrea Corallo2021-01-16 13:26:10 +0100
committerAndrea Corallo2021-01-16 13:26:10 +0100
commit0a7ac0b5504e75275699a3d8d2d5d94bcfda8708 (patch)
treebb6158c8a9edeb1e716718abfc98dca16aef9e9e /src/process.c
parentf1efac1f9efbfa15b6434ebef507c00c1277633f (diff)
parent0732fc31932c75c682c8b65b4dcb4376ca63e8fd (diff)
downloademacs-0a7ac0b5504e75275699a3d8d2d5d94bcfda8708.tar.gz
emacs-0a7ac0b5504e75275699a3d8d2d5d94bcfda8708.zip
Merge remote-tracking branch 'savannah/master' into native-comp
Diffstat (limited to 'src/process.c')
-rw-r--r--src/process.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/process.c b/src/process.c
index 06d750d3368..dac7d0440fa 100644
--- a/src/process.c
+++ b/src/process.c
@@ -692,8 +692,7 @@ status_convert (int w)
692 if (WIFSTOPPED (w)) 692 if (WIFSTOPPED (w))
693 return Fcons (Qstop, Fcons (make_fixnum (WSTOPSIG (w)), Qnil)); 693 return Fcons (Qstop, Fcons (make_fixnum (WSTOPSIG (w)), Qnil));
694 else if (WIFEXITED (w)) 694 else if (WIFEXITED (w))
695 return Fcons (Qexit, Fcons (make_fixnum (WEXITSTATUS (w)), 695 return Fcons (Qexit, Fcons (make_fixnum (WEXITSTATUS (w)), Qnil));
696 WCOREDUMP (w) ? Qt : Qnil));
697 else if (WIFSIGNALED (w)) 696 else if (WIFSIGNALED (w))
698 return Fcons (Qsignal, Fcons (make_fixnum (WTERMSIG (w)), 697 return Fcons (Qsignal, Fcons (make_fixnum (WTERMSIG (w)),
699 WCOREDUMP (w) ? Qt : Qnil)); 698 WCOREDUMP (w) ? Qt : Qnil));
@@ -2059,6 +2058,7 @@ create_process (Lisp_Object process, char **new_argv, Lisp_Object current_dir)
2059 bool pty_flag = 0; 2058 bool pty_flag = 0;
2060 char pty_name[PTY_NAME_SIZE]; 2059 char pty_name[PTY_NAME_SIZE];
2061 Lisp_Object lisp_pty_name = Qnil; 2060 Lisp_Object lisp_pty_name = Qnil;
2061 sigset_t oldset;
2062 2062
2063 inchannel = outchannel = -1; 2063 inchannel = outchannel = -1;
2064 2064
@@ -2139,13 +2139,16 @@ create_process (Lisp_Object process, char **new_argv, Lisp_Object current_dir)
2139 setup_process_coding_systems (process); 2139 setup_process_coding_systems (process);
2140 char **env = make_environment_block (current_dir); 2140 char **env = make_environment_block (current_dir);
2141 2141
2142 block_input ();
2143 block_child_signal (&oldset);
2144
2142 pty_flag = p->pty_flag; 2145 pty_flag = p->pty_flag;
2143 eassert (pty_flag == ! NILP (lisp_pty_name)); 2146 eassert (pty_flag == ! NILP (lisp_pty_name));
2144 2147
2145 vfork_errno 2148 vfork_errno
2146 = emacs_spawn (&pid, forkin, forkout, forkerr, new_argv, env, 2149 = emacs_spawn (&pid, forkin, forkout, forkerr, new_argv, env,
2147 SSDATA (current_dir), 2150 SSDATA (current_dir),
2148 pty_flag ? SSDATA (lisp_pty_name) : NULL); 2151 pty_flag ? SSDATA (lisp_pty_name) : NULL, &oldset);
2149 2152
2150 eassert ((vfork_errno == 0) == (0 < pid)); 2153 eassert ((vfork_errno == 0) == (0 < pid));
2151 2154
@@ -2153,6 +2156,10 @@ create_process (Lisp_Object process, char **new_argv, Lisp_Object current_dir)
2153 if (pid >= 0) 2156 if (pid >= 0)
2154 p->alive = 1; 2157 p->alive = 1;
2155 2158
2159 /* Stop blocking in the parent. */
2160 unblock_child_signal (&oldset);
2161 unblock_input ();
2162
2156 /* Environment block no longer needed. */ 2163 /* Environment block no longer needed. */
2157 unbind_to (count, Qnil); 2164 unbind_to (count, Qnil);
2158 2165