when we get ECHILD in samba_runcmd it is because the parent has set
SIGCHLD to SIG_IGN. In that case the child status information is
lost. We then have to fallback on the logging of child error messages
for any useful information on what happened to the child.
A longer term fix is to stop using SIG_IGN for SIGCHLD in the standard
process model of s4.
* stderr, assume its dead */
pid_t pid = waitpid(state->pid, &status, 0);
if (pid != state->pid) {
+ if (errno == ECHILD) {
+ /* this happens when the
+ parent has set SIGCHLD to
+ SIG_IGN. In that case we
+ can only get error
+ information for the child
+ via its logging. We should
+ stop using SIG_IGN on
+ SIGCHLD in the standard
+ process model.
+ */
+ tevent_req_done(req);
+ return;
+ }
DEBUG(0,("Error in waitpid() for child %s - %s \n",
state->arg0, strerror(errno)));
if (errno == 0) {