gspawn: Reset signal handlers for synchronous spawning
authorColin Walters <walters@verbum.org>
Fri, 10 Jun 2011 14:48:07 +0000 (10:48 -0400)
committerColin Walters <walters@verbum.org>
Tue, 14 Jun 2011 23:23:36 +0000 (19:23 -0400)
We should by default reset signal handlers; particularly with the
ability to install them via g_unix_signal_source_new(), we don't
want to call a user callback inside a fork()ed helper process.

https://bugzilla.gnome.org/show_bug.cgi?id=652072

glib/gspawn.c

index 4cd5a1a..1eed98e 100644 (file)
@@ -1238,6 +1238,12 @@ fork_exec_with_pipes (gboolean              intermediate_child,
       /* Immediate child. This may or may not be the child that
        * actually execs the new process.
        */
+
+      /* Reset some signal handlers that we may use */
+      signal (SIGCHLD, SIG_DFL);
+      signal (SIGINT, SIG_DFL);
+      signal (SIGTERM, SIG_DFL);
+      signal (SIGHUP, SIG_DFL);
       
       /* Be sure we crash if the parent exits
        * and we write to the err_report_pipe