On Tue, 20 Feb 2007 20:20:49 +0300
Oleg Nesterov <[email protected]> wrote:
> > > > + clear_stale_sigchild(current, retval);
> > >
> > > But we are not checking that SIGCHLD is blocked?
> > >
> > I'm sorry if I don't read SUSv3 correctly. SUSv3 doesn't define how we should
> > do if SIGCHLD is not blocked.(so I don't check not-blocked case.)
>
> Probably it is me who misunderstands SUSv3. Could you point me the reference
> to authoritative document? My understanding: if blocked AND wait() succeeds.
>
I read this:
http://www.opengroup.org/onlinepubs/009695399/
> > IMHO, user's sig-child-handler is tend to call wait()/waitpid() and expects
> > successful return. So removing stale signal here may be good.
>
> Yes. But sig-child-handler should do
>
> while (wait() >= 0)
> ....
>
> anyway, because SIGCHLD is not a realtime signal.
>
Ah...it looks I should explation why I found this more.
A user (who is migrated from Solaris) met following situation.
==(single threaded program.)
pid1 = fork();
if (!pid1) {
do_something_forever();
}
....set SIGCHLD handler here to catch pid1's error-exit....
if (!pid2) {
do_something_in_shortterm();
}
Block SIGCHLD
ret = waitpid(pid2, hoge, hoge); // wait for pid2
UNBlock SIGCHLD
==
And SIGCHLD handler didn't use WNOHANG.
I asked him to fix his program. He agreed.(So, no problem now.)
While our problem was fixed, it seems Linux doesn't meet spec.(SUSv3)
So I posted.
But this is rare situation and this fix makes codes ugly....
Thanks,
-Kame
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[Index of Archives]
[Kernel Newbies]
[Netfilter]
[Bugtraq]
[Photo]
[Stuff]
[Gimp]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Video 4 Linux]
[Linux for the blind]
[Linux Resources]