when the child fails we need to reap it to avoid a zombie. This would

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
This commit is contained in:
Arvind Samptur 2002-09-23 06:45:10 +00:00 committed by Arvind Samptur
parent 424d06b0a1
commit 0ce0882772
8 changed files with 56 additions and 1 deletions

View 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> 2002-09-20 Matthias Clasen <maclas@gmx.de>
* glib/gscanner.c (g_scanner_msg_handler): Don't print * glib/gscanner.c (g_scanner_msg_handler): Don't print

View 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> 2002-09-20 Matthias Clasen <maclas@gmx.de>
* glib/gscanner.c (g_scanner_msg_handler): Don't print * glib/gscanner.c (g_scanner_msg_handler): Don't print

View 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> 2002-09-20 Matthias Clasen <maclas@gmx.de>
* glib/gscanner.c (g_scanner_msg_handler): Don't print * glib/gscanner.c (g_scanner_msg_handler): Don't print

View 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> 2002-09-20 Matthias Clasen <maclas@gmx.de>
* glib/gscanner.c (g_scanner_msg_handler): Don't print * glib/gscanner.c (g_scanner_msg_handler): Don't print

View 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> 2002-09-20 Matthias Clasen <maclas@gmx.de>
* glib/gscanner.c (g_scanner_msg_handler): Don't print * glib/gscanner.c (g_scanner_msg_handler): Don't print

View 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> 2002-09-20 Matthias Clasen <maclas@gmx.de>
* glib/gscanner.c (g_scanner_msg_handler): Don't print * glib/gscanner.c (g_scanner_msg_handler): Don't print

View 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> 2002-09-20 Matthias Clasen <maclas@gmx.de>
* glib/gscanner.c (g_scanner_msg_handler): Don't print * glib/gscanner.c (g_scanner_msg_handler): Don't print

View File

@ -961,7 +961,7 @@ fork_exec_with_pipes (gboolean intermediate_child,
gint *standard_error, gint *standard_error,
GError **error) GError **error)
{ {
gint pid; gint pid = -1;
gint stdin_pipe[2] = { -1, -1 }; gint stdin_pipe[2] = { -1, -1 };
gint stdout_pipe[2] = { -1, -1 }; gint stdout_pipe[2] = { -1, -1 };
gint stderr_pipe[2] = { -1, -1 }; gint stderr_pipe[2] = { -1, -1 };
@ -1219,6 +1219,26 @@ fork_exec_with_pipes (gboolean intermediate_child,
} }
cleanup_and_fail: 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[0]);
close_and_invalidate (&child_err_report_pipe[1]); close_and_invalidate (&child_err_report_pipe[1]);
close_and_invalidate (&child_pid_report_pipe[0]); close_and_invalidate (&child_pid_report_pipe[0]);