aboutsummaryrefslogtreecommitdiffstats
path: root/src/callproc.c
diff options
context:
space:
mode:
authorPaul Eggert2012-12-07 18:30:51 -0800
committerPaul Eggert2012-12-07 18:30:51 -0800
commitd983a10b9a070fd8f6d4f48ec44e5514b62feaa6 (patch)
tree1b7353b39c508615eb0d2cf4475fdfabf8ef6ce0 /src/callproc.c
parent9cdde1e2dfdd7b1a4e52294bca1467dc7a48c77a (diff)
downloademacs-d983a10b9a070fd8f6d4f48ec44e5514b62feaa6.tar.gz
emacs-d983a10b9a070fd8f6d4f48ec44e5514b62feaa6.zip
Assume POSIX 1003.1-1988 or later for signal.h.
Exceptions: do not assume SIGCONT, SIGSTOP, SIGTSTP, SIGTTIN, SIGTTOU, SIGUSR1, SIGUSR2, as Microsoft platforms lack these. * admin/CPP-DEFINES (SIGALRM, SIGCHLD, SIGHUP, SIGKILL, SIGPIPE, SIGQUIT): Remove. (SIGTRAP): Remove this one too, as config.h no longer defines it. * admin/merge-gnulib (GNULIB_MODULES): Add sig2str. * configure.ac (PTY_OPEN, PTY_TTY_NAME_SPRINTF): Use SIGCHLD rather than SIGCLD. * lib/sig2str.c, lib/sig2str.h, m4/sig2str.m4: New files, from gnulib. * lib/gnulib.mk, m4/gnulib-comp.m4: Regenerate. * lib/makefile.w32-in (GNULIBOBJS): Add $(BUILD)/sig2str.$(O). * src/process.c [subprocesses]: Include <c-ctype.h>, <sig2str.h>. (deleted_pid_list, Fdelete_process, create_process) (record_child_status_change, handle_child_signal, deliver_child_signal) (init_process_emacs, syms_of_process): Assume SIGCHLD is defined. (parse_signal): Remove. All uses removed. (abbr_to_signal): New static function. (Fsignal_process): Use it to convert signal names to ints. * src/sysdep.c (sys_suspend) [!DOS_NT]: Use kill (0, ...) rather than kill (getpgrp (), ...). (emacs_sigaction_init): Assume SIGCHLD is defined. (init_signals): Assume SIGALRM, SIGCHLD, SIGHUP, SIGKILL, SIGPIPE, and SIGQUIT are defined. Do not worry about SIGCLD any more. * src/syssignal.h (EMACS_KILLPG): Remove. All uses replaced by 'kill' with a negative pid. (SIGCHLD): Remove definition, as we now assume SIGCHLD. * src/w32proc.c (sys_kill): Support negative pids compatibly with POSIX. Fixes: debbugs:13026
Diffstat (limited to 'src/callproc.c')
-rw-r--r--src/callproc.c8
1 files changed, 2 insertions, 6 deletions
diff --git a/src/callproc.c b/src/callproc.c
index e0528a791ea..70e349d0d3a 100644
--- a/src/callproc.c
+++ b/src/callproc.c
@@ -87,12 +87,10 @@ static int synch_process_fd;
87static void 87static void
88block_child_signal (void) 88block_child_signal (void)
89{ 89{
90#ifdef SIGCHLD
91 sigset_t blocked; 90 sigset_t blocked;
92 sigemptyset (&blocked); 91 sigemptyset (&blocked);
93 sigaddset (&blocked, SIGCHLD); 92 sigaddset (&blocked, SIGCHLD);
94 pthread_sigmask (SIG_BLOCK, &blocked, 0); 93 pthread_sigmask (SIG_BLOCK, &blocked, 0);
95#endif
96} 94}
97 95
98/* Unblock SIGCHLD. */ 96/* Unblock SIGCHLD. */
@@ -100,9 +98,7 @@ block_child_signal (void)
100static void 98static void
101unblock_child_signal (void) 99unblock_child_signal (void)
102{ 100{
103#ifdef SIGCHLD
104 pthread_sigmask (SIG_SETMASK, &empty_mask, 0); 101 pthread_sigmask (SIG_SETMASK, &empty_mask, 0);
105#endif
106} 102}
107 103
108/* If P is reapable, record it as a deleted process and kill it. 104/* If P is reapable, record it as a deleted process and kill it.
@@ -118,7 +114,7 @@ record_kill_process (struct Lisp_Process *p)
118 { 114 {
119 p->alive = 0; 115 p->alive = 0;
120 record_deleted_pid (p->pid); 116 record_deleted_pid (p->pid);
121 EMACS_KILLPG (p->pid, SIGKILL); 117 kill (- p->pid, SIGKILL);
122 } 118 }
123 119
124 unblock_child_signal (); 120 unblock_child_signal ();
@@ -164,7 +160,7 @@ call_process_cleanup (Lisp_Object arg)
164 if (synch_process_pid) 160 if (synch_process_pid)
165 { 161 {
166 ptrdiff_t count = SPECPDL_INDEX (); 162 ptrdiff_t count = SPECPDL_INDEX ();
167 EMACS_KILLPG (synch_process_pid, SIGINT); 163 kill (-synch_process_pid, SIGINT);
168 record_unwind_protect (call_process_kill, make_number (0)); 164 record_unwind_protect (call_process_kill, make_number (0));
169 message1 ("Waiting for process to die...(type C-g again to kill it instantly)"); 165 message1 ("Waiting for process to die...(type C-g again to kill it instantly)");
170 immediate_quit = 1; 166 immediate_quit = 1;