Don't call waitpid() on a source that has already exited.
authorOwen Taylor <otaylor@redhat.com>
Mon, 1 Mar 2004 20:56:47 +0000 (20:56 +0000)
committerOwen Taylor <otaylor@src.gnome.org>
Mon, 1 Mar 2004 20:56:47 +0000 (20:56 +0000)
Mon Mar  1 15:49:09 2004  Owen Taylor  <otaylor@redhat.com>

        * glib/gmain.c (check_for_child_exited): Don't
        call waitpid() on a source that has already exited.

        * glib/gmain.c (g_child_watch_check): Return TRUE
        only if the child actually exited.

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

index 75bca55c0abaa9084896e714bd7ec1ae5606e001..ee9c2d0485ce3e5cf2f6bc0f105491460ace3e21 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+Mon Mar  1 15:49:09 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * glib/gmain.c (check_for_child_exited): Don't
+       call waitpid() on a source that has already exited.
+
+       * glib/gmain.c (g_child_watch_check): Return TRUE
+       only if the child actually exited.
+
 Mon Mar  1 15:39:57 2004  Owen Taylor  <otaylor@redhat.com>
 
        Patch from J. Ali Harlow
index 75bca55c0abaa9084896e714bd7ec1ae5606e001..ee9c2d0485ce3e5cf2f6bc0f105491460ace3e21 100644 (file)
@@ -1,3 +1,11 @@
+Mon Mar  1 15:49:09 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * glib/gmain.c (check_for_child_exited): Don't
+       call waitpid() on a source that has already exited.
+
+       * glib/gmain.c (g_child_watch_check): Return TRUE
+       only if the child actually exited.
+
 Mon Mar  1 15:39:57 2004  Owen Taylor  <otaylor@redhat.com>
 
        Patch from J. Ali Harlow
index 75bca55c0abaa9084896e714bd7ec1ae5606e001..ee9c2d0485ce3e5cf2f6bc0f105491460ace3e21 100644 (file)
@@ -1,3 +1,11 @@
+Mon Mar  1 15:49:09 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * glib/gmain.c (check_for_child_exited): Don't
+       call waitpid() on a source that has already exited.
+
+       * glib/gmain.c (g_child_watch_check): Return TRUE
+       only if the child actually exited.
+
 Mon Mar  1 15:39:57 2004  Owen Taylor  <otaylor@redhat.com>
 
        Patch from J. Ali Harlow
index 75bca55c0abaa9084896e714bd7ec1ae5606e001..ee9c2d0485ce3e5cf2f6bc0f105491460ace3e21 100644 (file)
@@ -1,3 +1,11 @@
+Mon Mar  1 15:49:09 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * glib/gmain.c (check_for_child_exited): Don't
+       call waitpid() on a source that has already exited.
+
+       * glib/gmain.c (g_child_watch_check): Return TRUE
+       only if the child actually exited.
+
 Mon Mar  1 15:39:57 2004  Owen Taylor  <otaylor@redhat.com>
 
        Patch from J. Ali Harlow
index 75bca55c0abaa9084896e714bd7ec1ae5606e001..ee9c2d0485ce3e5cf2f6bc0f105491460ace3e21 100644 (file)
@@ -1,3 +1,11 @@
+Mon Mar  1 15:49:09 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * glib/gmain.c (check_for_child_exited): Don't
+       call waitpid() on a source that has already exited.
+
+       * glib/gmain.c (g_child_watch_check): Return TRUE
+       only if the child actually exited.
+
 Mon Mar  1 15:39:57 2004  Owen Taylor  <otaylor@redhat.com>
 
        Patch from J. Ali Harlow
index 75bca55c0abaa9084896e714bd7ec1ae5606e001..ee9c2d0485ce3e5cf2f6bc0f105491460ace3e21 100644 (file)
@@ -1,3 +1,11 @@
+Mon Mar  1 15:49:09 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * glib/gmain.c (check_for_child_exited): Don't
+       call waitpid() on a source that has already exited.
+
+       * glib/gmain.c (g_child_watch_check): Return TRUE
+       only if the child actually exited.
+
 Mon Mar  1 15:39:57 2004  Owen Taylor  <otaylor@redhat.com>
 
        Patch from J. Ali Harlow
index b78842eb41341145a0414463616bd1b2e8831245..bed8e6288646c9bce7394e9ea2806f72c5365007 100644 (file)
@@ -3441,7 +3441,7 @@ g_child_watch_check (GSource  *source)
 
 #else /* G_OS_WIN32 */
 
-static void
+static gboolean
 check_for_child_exited (GSource *source)
 {
   GChildWatchSource *child_watch_source;
@@ -3452,6 +3452,9 @@ check_for_child_exited (GSource *source)
 
   child_watch_source = (GChildWatchSource *) source;
 
+  if (child_watch_source->child_exited)
+    return TRUE;
+
   if (child_watch_source->count < count)
     {
       gint child_status;
@@ -3463,6 +3466,8 @@ check_for_child_exited (GSource *source)
        }
       child_watch_source->count = count;
     }
+
+  return child_watch_source->child_exited;
 }
 
 static gboolean
@@ -3474,9 +3479,7 @@ g_child_watch_prepare (GSource *source,
 
   child_watch_source = (GChildWatchSource *) source;
 
-  check_for_child_exited (source);
-
-  return child_watch_source->child_exited;
+  return check_for_child_exited (source);
 }
 
 
@@ -3487,7 +3490,7 @@ g_child_watch_check (GSource  *source)
 
   child_watch_source = (GChildWatchSource *) source;
 
-  return (child_watch_source->count < child_watch_count);
+  return check_for_child_exited (source);
 }
 
 #endif /* G_OS_WIN32 */