This is the mail archive of the cygwin-developers@cygwin.com mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: snapshot 20050114 race (on list)


On Fri, Jan 14, 2005 at 01:33:51PM -0500, Pierre A. Humblet wrote:
>Chris,
>
>the race can come from the self->alert_parent (0);
>in :exit, causing bash to think that the child
>has exited when it's still running.

>There may be a deeper issue, as the timing of Windows
>closing the pipe and "closing" the process is not
>under Cygwin's control.
>
>There may also be a race (unrelated) between
>setting the state to PID_ZOMBIE in the parent
>and PID_EXITED in the child. This will affect
>sigproc.cc:  if (!((terminated = (child->process_state == PID_ZOMBIE)) ||
>
>I think there is no real need to distinguish between
>PID_ZOMBIE and PID_EXITED.

Actually, there is.  I thought about this a lot.  I would like to get
rid of both states but they are not identical.  The PID_ZOMBIE state
is only valid for situations when the parent has not yet wait()ed for
the child or for when the parent is ignoring SIGCHLD.  PID_EXIT just
indicates that the child has exited and the parent, if one exists,
hasn't gotten around to it yet.

While you could just set PID_ZOMBIE in every case, that would mean
that ps would occasionally display a pid as a zombie that wasn't
truly a zombie.  I couldn't convince myself that was a good thing.

I also don't see how there can be a race between setting PID_ZOMBIE and
PID_EXITED.  PID_ZOMBIE is only set when a child has either already set
PID_EXITED or the child has exited.

I don't understand the other race either.  Theoretically cygwin has
closed all handles by the time it has hit pinfo::exit.  If there are
still open handles that would indicate a handle leak somewhere, it
seems.

cgf


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]