NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: standards/51024 (NetBSD misses the mandatory waitid() syscall)



On Apr 4,  2:48pm, Joerg.Schilling%fokus.fraunhofer.de@localhost (Joerg Schilling) wrote:
-- Subject: Re: standards/51024 (NetBSD misses the mandatory waitid() syscall

| Thank you for your work!
| 
| I do not have netbsd installed, so I checked the sources.
| 
| 1)	I do not see any changes in the signal handling.
| 	Is siginfo_t filled correctly in for the signalhandler
| 	that handles SIGCHLD? It should deliver the same 
| 	information as waitid() delivers, including the full 32 bits
| 	from the exit() call in the child.

Do you have the reference where it says it needs to preserve all 32 bits
of exit code? I have not found one.

| 2)	kern_exit.c does not look correct (complete).
| 	If you really like to keep the deprecated wait status in the kernel,
| 	you should use a more complete conversion code to convert the
| 	deprecated wait status into siginfo_t. A correct piece of code
| 	is in the compatibility code of the recent Bourne Shell:
| 
| 		http://schilytools.sourceforge.net/bosh.html
| 
| 	Source code is in the schily tools:
| 
| 		https://sourceforge.net/projects/schilytools/files/
| 
| 	Use latest *schily-*' tar archive.
| 
| 	Check the bottom of the file sh/jobs.c

I'll take a look.

| 3)	From what I can tell, the new netbsd waitid() code only delivers
| 	the low 8 bits from the exit() parameter. This is incorrect.
| 
| 	waitid() was introduced in 1989 by AT&T for SVr4 and defines to
| 	deliver all 32 bits from the exit() call of the child.
| 
| 	Given that POSIX does not introcude own definitions but just
| 	standardizes existing implementations, it should be obvious that
| 	the SVID3 interface definitions apply to the POSIX waitid() call.
| 
| 	As a hint, here is the currenty valid relevant POSIX text:
| 
| 	**********
| 	    the least significant 8 bits (that is, status & 0377) shall be 
| 	    available from wait() and waitpid(); the full value shall 
| 	    be available from waitid() and in the siginfo_t passed to a 
| 	    signal handler for SIGCHLD. 
| 	**********
| 
| I hope that you are interested in full POSIX compliance with waitid() as
| waitid() is part of the basic set of interfaces. 

Yes, and I know how to do that; the question is, where is it spelled in
the docs that the full 32 bits of exit code need to be preserved?

christos


Home | Main Index | Thread Index | Old Index