diff options
| author | Paul Eggert | 2013-06-23 11:18:47 -0700 |
|---|---|---|
| committer | Paul Eggert | 2013-06-23 11:18:47 -0700 |
| commit | c7041908b82205af2f812f9de782003d975f53da (patch) | |
| tree | 6d0d071cc0cd36cf172a18b92e5b1f41c3299b80 /src/process.c | |
| parent | 18bb9e21f3a95114d34947283e76a973692b526c (diff) | |
| download | emacs-c7041908b82205af2f812f9de782003d975f53da.tar.gz emacs-c7041908b82205af2f812f9de782003d975f53da.zip | |
Try to avoid malloc SEGVs on Cygwin.
* callproc.c, process.h (block_child_signal, unblock_child_signal):
Now extern.
* emacs.c (main): Catch SIGCHLD just before initializing gfilenotify.
* process.c (catch_child_signal): Block SIGCHLD while futzing with
the SIGCHLD handler, since the code is not atomic and (due to glib)
signals may be arriving now.
* sysdep.c (init_signals): Do not catch child signals here;
'main' now does that later, at a safer time.
Fixes: debbugs:14569
Diffstat (limited to 'src/process.c')
| -rw-r--r-- | src/process.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/src/process.c b/src/process.c index 3e31dede4c2..6df1bf7eff7 100644 --- a/src/process.c +++ b/src/process.c | |||
| @@ -7084,11 +7084,13 @@ catch_child_signal (void) | |||
| 7084 | #endif | 7084 | #endif |
| 7085 | 7085 | ||
| 7086 | emacs_sigaction_init (&action, deliver_child_signal); | 7086 | emacs_sigaction_init (&action, deliver_child_signal); |
| 7087 | block_child_signal (); | ||
| 7087 | sigaction (SIGCHLD, &action, &old_action); | 7088 | sigaction (SIGCHLD, &action, &old_action); |
| 7088 | eassert (! (old_action.sa_flags & SA_SIGINFO)); | 7089 | eassert (! (old_action.sa_flags & SA_SIGINFO)); |
| 7089 | if (old_action.sa_handler != SIG_DFL && old_action.sa_handler != SIG_IGN | 7090 | if (old_action.sa_handler != SIG_DFL && old_action.sa_handler != SIG_IGN |
| 7090 | && old_action.sa_handler != deliver_child_signal) | 7091 | && old_action.sa_handler != deliver_child_signal) |
| 7091 | lib_child_handler = old_action.sa_handler; | 7092 | lib_child_handler = old_action.sa_handler; |
| 7093 | unblock_child_signal (); | ||
| 7092 | } | 7094 | } |
| 7093 | 7095 | ||
| 7094 | 7096 | ||