From 98f56d64c2c48fdb3d79e5dfa9971154a3dcccda Mon Sep 17 00:00:00 2001 From: Christopher Faylor Date: Thu, 18 Dec 2003 04:42:31 +0000 Subject: [PATCH] * sigproc.cc (proc_subproc): Simplify code to just remove all zombies if SIGCHLD == SIG_IGN. --- winsup/cygwin/ChangeLog | 5 +++++ winsup/cygwin/sigproc.cc | 11 +++++------ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index e44dd1ed3..da333b373 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,8 @@ +2003-12-17 Christopher Faylor + + * sigproc.cc (proc_subproc): Simplify code to just remove all zombies + if SIGCHLD == SIG_IGN. + 2003-12-17 Christopher Faylor * pinfo.h (pinfo::operator ==): Add a way to check for _pinfo types. diff --git a/winsup/cygwin/sigproc.cc b/winsup/cygwin/sigproc.cc index 78e45e67f..0f4431f85 100644 --- a/winsup/cygwin/sigproc.cc +++ b/winsup/cygwin/sigproc.cc @@ -305,7 +305,6 @@ proc_subproc (DWORD what, DWORD val) int clearing; waitq *w; int thiszombie; - _pinfo *zombie_proc = NULL; #define wval ((waitq *) val) @@ -378,7 +377,7 @@ proc_subproc (DWORD what, DWORD val) pchildren[val]->pid, val, hchildren[val], nchildren, nzombies); thiszombie = nzombies; - zombie_proc = zombies[nzombies] = pchildren[val]; // Add to zombie array + zombies[nzombies] = pchildren[val]; // Add to zombie array zombies[nzombies++]->process_state = PID_ZOMBIE;// Walking dead sigproc_printf ("zombifying [%d], pid %d, handle %p, nchildren %d", @@ -478,13 +477,13 @@ proc_subproc (DWORD what, DWORD val) sigproc_printf ("finished processing terminated/stopped child"); else { - if (zombie_proc && zombies[thiszombie] - && zombies[thiszombie] == zombie_proc - && global_sigs[SIGCHLD].sa_handler == (void *) SIG_IGN) - remove_zombie (thiszombie); waitq_head.next = NULL; sigproc_printf ("finished clearing"); } + + if (global_sigs[SIGCHLD].sa_handler == (void *) SIG_IGN) + while (nzombies) + remove_zombie (0); break; }