On Wed, Jan 22, 2003 at 11:44:08PM -0500, Eric Gillespie wrote:
As an attempt to make this on-topic for both lists, i won't go
into how i discovered the bug. I don't think it's necessary.
Correctly using waitpid(2) involves checking for EINTR and trying
again. That leads to common usage being something like this:
That does look like a bug.
...
It looks like the APR equivalent is supposed to be:
do {
apr_err = apr_proc_wait (cmd_proc, exitcode_val,
exitwhy_val, APR_WAIT);
} while (APR_STATUS_IS_CHILD_NOTDONE (apr_err));
Is that correct?
I don't think so really: the child will only be NOTDONE if you pass in
APR_NOWAIT; otherwise, the waitpid waits until the child *is* done.
...
It may be as simple as changing APR_STATUS_IS_CHILD_NOTDONE, in
which case apr_proc_wait doesn't need to change at all. But i am
not sure that is the solution. No matter what, svn_io_run_cmd
will need to change so that it repeats the apr_proc_wait call as
necessary (unless you want to make apr_proc_wait itself loop over
waitpid(2), which i think is NOT the way to go).
My guess would be to make apr_proc_wait loop over waitpid whilst
errno=EINTR; that's what the rest of APR does. Though the interactions
between waitpid and SIGCHLD here are a bit daunting, just from reading
the Linux waitpid() man page.
Regards,
joe
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Sat Oct 14 02:09:02 2006