From d83eb0c7d0c4c58ade045e1ee44a6f5ade83e964 Mon Sep 17 00:00:00 2001 From: Christopher Faylor <me@cgf.cx> Date: Wed, 2 Mar 2005 15:32:34 +0000 Subject: [PATCH] * spawn.cc (do_cleanup): Properly restore SIGINT/SIGQUIT even if they had previously been SIG_DFL. --- winsup/cygwin/ChangeLog | 5 +++++ winsup/cygwin/spawn.cc | 12 ++++++------ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index e62d17d4e..2b2f1caea 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,8 @@ +2005-03-02 Christopher Faylor <cgf@timesys.com> + + * spawn.cc (do_cleanup): Properly restore SIGINT/SIGQUIT even if they + had previously been SIG_DFL. + 2005-03-01 Corinna Vinschen <corinna@vinschen.de> * fhandler_disk_file.cc (fhandler_disk_file::touch_ctime): Replace diff --git a/winsup/cygwin/spawn.cc b/winsup/cygwin/spawn.cc index cfd89a840..38a2a1e9a 100644 --- a/winsup/cygwin/spawn.cc +++ b/winsup/cygwin/spawn.cc @@ -332,12 +332,12 @@ static void do_cleanup (void *args) { # define cleanup ((pthread_cleanup *) args) - if (cleanup->oldint) - signal (SIGINT, cleanup->oldint); - if (cleanup->oldquit) - signal (SIGQUIT, cleanup->oldquit); if (cleanup->oldmask != (sigset_t) -1) - sigprocmask (SIG_SETMASK, &(cleanup->oldmask), NULL); + { + signal (SIGINT, cleanup->oldint); + signal (SIGQUIT, cleanup->oldquit); + sigprocmask (SIG_SETMASK, &(cleanup->oldmask), NULL); + } # undef cleanup } @@ -755,7 +755,6 @@ spawn_guts (const char * prog_arg, const char *const *argv, int res; pthread_cleanup cleanup; - pthread_cleanup_push (do_cleanup, (void *) &cleanup); if (mode == _P_SYSTEM) { sigset_t child_block; @@ -765,6 +764,7 @@ spawn_guts (const char * prog_arg, const char *const *argv, sigaddset (&child_block, SIGCHLD); (void) sigprocmask (SIG_BLOCK, &child_block, &cleanup.oldmask); } + pthread_cleanup_push (do_cleanup, (void *) &cleanup); /* Fixup the parent data structures if needed and resume the child's main thread. */