"Alexis S. L. Carvalho" <alexis cecm usp br> writes:
> The fact that you can only install the signal handler after launching a
> child still feels sort of like using uninitialized data. I don't see
> where this could be a problem, but then, I'm no Unix guru...
The only problem I came up with was when the user already has a child
handler that calls wait() or waitpid(-1), and the child exits before the
new handler is installed. I wonder if we should special case
g_child_watch_add (-1|0); and add a return value to GChildWatchFunc so
that the handler can be canceled.
> I don't think this has to be volatile.
It wasn't originally. I just put it in to make Alex feel better. (-;
> > +static void
> > +g_child_watch_signal_handler (int signum)
> > +{
> > + child_watch_count ++;
> > + /* guard against us modifying errno during the write */
> > + int old_errno = errno;
>
> The declaration should be in the beginning of the block.
Right. Moved on my copy.
> Now the bad news: I'm afraid I wasn't able to run your child-test
> correctly. I don't really know the internals of GMainLoop, but if I
> understood correctly, it was always the thread running in main that
> called waitpid. It always failed with ECHILD (No child processes).
I may have sent a bogus copy of child-test.c in retrospect. Let me
attach another copy instead.
Thanks,
-Jonathan
Attachment:
child-test.c
Description: new child test file.