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

Re: [MiNT] waitpid-return-value if WNOHANG



On 29/09/15 23:36, Helmut Karlowski wrote:
> Hi,
>
> Posix says for waitpid():
>
> ...
> If waitpid() was invoked with WNOHANG set in options, it has at least one
> child process specified by pid for which status is not available, and
> status is not available for any process specified by pid, 0 is returned.
> Otherwise, -1 shall be returned, and errno set to indicate the error.
> ...
> The waitpid() function shall fail if:
> [ECHILD]
> The process specified by pid does not exist or is not a child of the
> calling process, or the process group specified by pid does not exist
> or does not have any member process that is a child of the calling
> process.
> [EINTR]
> The function was interrupted by a signal. The value of the location
> pointed to by stat_loc is undefined.
> [EINVAL]
> The options argument is not valid.
>
>
> k_exit.c#465 says:
>
>         {
>           /* Don't report that for WNOHANG.  */
>           if (!(nohang & 1))
>             DEBUG(("Pwaitpid: no children found"));
>
>           return ENOENT;
>         }
>
> and mintlib/unix/wait4.c:
>
>     if (retval < 0) {
>       if (retval == -ENOENT || retval == -ECHILD)
>         {
>           if (options & WNOHANG)
>             return 0;          /* Work-around for kernel bug.  */
>           retval = -ECHILD;
>         }
>
> I think pwaitpid in MiNT should return ECHILD, and wait4 in the mintlib
> should return -1. Or would that break existing programs?

There is a note in k_exit.c with regard to WNOHANG.

Alan.