1
1

Face the possibilty that the child may have already died.

This commit was SVN r9508.
Этот коммит содержится в:
Jeff Squyres 2006-04-01 02:23:10 +00:00
родитель bd6825f513
Коммит 858612fd06

Просмотреть файл

@ -100,12 +100,18 @@ static void set_handler_default(int sig);
static bool orte_pls_fork_child_died(pid_t pid, unsigned int timeout) static bool orte_pls_fork_child_died(pid_t pid, unsigned int timeout)
{ {
time_t end; time_t end;
pid_t ret;
end = time(NULL) + timeout; end = time(NULL) + timeout;
while (time(NULL) < end) { while (time(NULL) < end) {
if (pid == waitpid(pid, NULL, WNOHANG)) { ret = waitpid(pid, NULL, WNOHANG);
if (pid == ret) {
/* It died -- return success */ /* It died -- return success */
return true; return true;
} else if (-1 == pid && ECHILD == errno) {
/* The pid no longer exists, so we'll call this "good
enough for government work" */
return true;
} }
/* Sleep for a second */ /* Sleep for a second */