when the child fails we need to reap it to avoid a zombie. This would
authorArvind Samptur <arvind.samptur@wipro.com>
Mon, 23 Sep 2002 06:45:10 +0000 (06:45 +0000)
committerArvind Samptur <arvind@src.gnome.org>
Mon, 23 Sep 2002 06:45:10 +0000 (06:45 +0000)
2002-09-23  Arvind Samptur <arvind.samptur@wipro.com>
        * glib/gspawn.c (fork_exec_with_pipes) : when the child fails
        we need to reap it to avoid a zombie. This would
        happen in case of g_spawn_sync. Fixes #92658

ChangeLog
ChangeLog.pre-2-10
ChangeLog.pre-2-12
ChangeLog.pre-2-2
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
glib/gspawn.c

index 32165bd..0095086 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2002-09-23  Arvind Samptur <arvind.samptur@wipro.com>
+       * glib/gspawn.c (fork_exec_with_pipes) : when the child fails
+       we need to reap it to avoid a zombie. This would
+       happen in case of g_spawn_sync. Fixes #92658
+
 2002-09-20  Matthias Clasen  <maclas@gmx.de>
 
        * glib/gscanner.c (g_scanner_msg_handler): Don't print
index 32165bd..0095086 100644 (file)
@@ -1,3 +1,8 @@
+2002-09-23  Arvind Samptur <arvind.samptur@wipro.com>
+       * glib/gspawn.c (fork_exec_with_pipes) : when the child fails
+       we need to reap it to avoid a zombie. This would
+       happen in case of g_spawn_sync. Fixes #92658
+
 2002-09-20  Matthias Clasen  <maclas@gmx.de>
 
        * glib/gscanner.c (g_scanner_msg_handler): Don't print
index 32165bd..0095086 100644 (file)
@@ -1,3 +1,8 @@
+2002-09-23  Arvind Samptur <arvind.samptur@wipro.com>
+       * glib/gspawn.c (fork_exec_with_pipes) : when the child fails
+       we need to reap it to avoid a zombie. This would
+       happen in case of g_spawn_sync. Fixes #92658
+
 2002-09-20  Matthias Clasen  <maclas@gmx.de>
 
        * glib/gscanner.c (g_scanner_msg_handler): Don't print
index 32165bd..0095086 100644 (file)
@@ -1,3 +1,8 @@
+2002-09-23  Arvind Samptur <arvind.samptur@wipro.com>
+       * glib/gspawn.c (fork_exec_with_pipes) : when the child fails
+       we need to reap it to avoid a zombie. This would
+       happen in case of g_spawn_sync. Fixes #92658
+
 2002-09-20  Matthias Clasen  <maclas@gmx.de>
 
        * glib/gscanner.c (g_scanner_msg_handler): Don't print
index 32165bd..0095086 100644 (file)
@@ -1,3 +1,8 @@
+2002-09-23  Arvind Samptur <arvind.samptur@wipro.com>
+       * glib/gspawn.c (fork_exec_with_pipes) : when the child fails
+       we need to reap it to avoid a zombie. This would
+       happen in case of g_spawn_sync. Fixes #92658
+
 2002-09-20  Matthias Clasen  <maclas@gmx.de>
 
        * glib/gscanner.c (g_scanner_msg_handler): Don't print
index 32165bd..0095086 100644 (file)
@@ -1,3 +1,8 @@
+2002-09-23  Arvind Samptur <arvind.samptur@wipro.com>
+       * glib/gspawn.c (fork_exec_with_pipes) : when the child fails
+       we need to reap it to avoid a zombie. This would
+       happen in case of g_spawn_sync. Fixes #92658
+
 2002-09-20  Matthias Clasen  <maclas@gmx.de>
 
        * glib/gscanner.c (g_scanner_msg_handler): Don't print
index 32165bd..0095086 100644 (file)
@@ -1,3 +1,8 @@
+2002-09-23  Arvind Samptur <arvind.samptur@wipro.com>
+       * glib/gspawn.c (fork_exec_with_pipes) : when the child fails
+       we need to reap it to avoid a zombie. This would
+       happen in case of g_spawn_sync. Fixes #92658
+
 2002-09-20  Matthias Clasen  <maclas@gmx.de>
 
        * glib/gscanner.c (g_scanner_msg_handler): Don't print
index d8ed1d9..3df45f4 100644 (file)
@@ -961,7 +961,7 @@ fork_exec_with_pipes (gboolean              intermediate_child,
                       gint                 *standard_error,
                       GError              **error)     
 {
-  gint pid;
+  gint pid = -1;
   gint stdin_pipe[2] = { -1, -1 };
   gint stdout_pipe[2] = { -1, -1 };
   gint stderr_pipe[2] = { -1, -1 };
@@ -1219,6 +1219,26 @@ fork_exec_with_pipes (gboolean              intermediate_child,
     }
 
  cleanup_and_fail:
+
+  /* There was an error from the Child, reap the child to avoid it being
+     a zombie.
+   */
+
+  if (pid > 0)
+  {
+    wait_failed:
+     if (waitpid (pid, NULL, 0) < 0)
+       {
+          if (errno == EINTR)
+            goto wait_failed;
+          else if (errno == ECHILD)
+            ; /* do nothing, child already reaped */
+          else
+            g_warning ("waitpid() should not fail in "
+                       "'fork_exec_with_pipes'");
+       }
+   }
+
   close_and_invalidate (&child_err_report_pipe[0]);
   close_and_invalidate (&child_err_report_pipe[1]);
   close_and_invalidate (&child_pid_report_pipe[0]);