+++ This bug was initially created as a clone of Bug #439814 +++ Description of problem: In reviewing the nanny code I discovered what appears to be a minor coding defect: char * getExecOutput (int flags, char **argv, int timeout) { ....... pipe (p); if (!(child = fork ())) { int stdin, stderr; ......... execvp (argv[0], argv); exit (1); } close (p[1]); alarm (timeout); needsKilling = child; sigprocmask (SIG_UNBLOCK, &sigs, &oldSigs); rc = waitpid (child, &status, 0); <--------- rc sigprocmask (SIG_SETMASK, &oldSigs, NULL); needsKilling = 0; if (rc < 0) { if (rc == EINTR) <------------- bug!! Should be errno! piranha_log (flags, (char *) "unexpected return \"%s\" running the following:"); else piranha_log (flags, (char *) "timeout running the following:"); The above code makes a check of rc as though it is an errno, this is incorrect, the syscall rc value will be -1 and errno would be set to EINTR, as per the waitpid man page: ........ RETURN VALUE wait(): on success, returns the process ID of the terminated child; on error, -1 is returned. waitpid(): on success, returns the process ID of the child whose state has changed; on error, -1 is returned; if WNO- HANG was specified and no child(ren) specified by pid has yet changed state, then 0 is returned. waitid(): returns 0 on success or if WNOHANG was specified and no child(ren) specified by id has yet changed state; on error, -1 is returned. Each of these calls sets errno to an appropriate value in the case of an error.
This request was evaluated by Red Hat Product Management for inclusion in a Red Hat Enterprise Linux maintenance release. Product Management has requested further review of this request by Red Hat Engineering, for potential inclusion in a Red Hat Enterprise Linux Update release for currently deployed products. This request is not yet committed for inclusion in an Update release.
Fixed in CVS
*** Bug 450166 has been marked as a duplicate of this bug. ***
An advisory has been issued which should help the problem described in this bug report. This report is therefore being closed with a resolution of ERRATA. For more information on the solution and/or where to find the updated files, please follow the link below. You may reopen this bug report if the solution does not work for you. http://rhn.redhat.com/errata/RHBA-2008-0794.html