Report success when Windows kill() emulation signals an exiting process.

This is consistent with the POSIX verdict that kill() shall not report
ESRCH for a zombie process.  Back-patch to 9.0 (all supported versions).
Test code from commit d7cdf6ee36 depends
on it, and log messages about kill() reporting "Invalid argument" will
cease to appear for this not-unexpected condition.
This commit is contained in:
Noah Misch 2014-07-23 00:35:13 -04:00
parent 44acd17605
commit b28761cb31

View File

@ -70,13 +70,28 @@ pgkill(int pid, int sig)
return 0;
}
if (GetLastError() == ERROR_FILE_NOT_FOUND)
errno = ESRCH;
else if (GetLastError() == ERROR_ACCESS_DENIED)
errno = EPERM;
else
errno = EINVAL;
return -1;
switch (GetLastError())
{
case ERROR_BROKEN_PIPE:
case ERROR_BAD_PIPE:
/*
* These arise transiently as a process is exiting. Treat them
* like POSIX treats a zombie process, reporting success.
*/
return 0;
case ERROR_FILE_NOT_FOUND:
/* pipe fully gone, so treat the process as gone */
errno = ESRCH;
return -1;
case ERROR_ACCESS_DENIED:
errno = EPERM;
return -1;
default:
errno = EINVAL; /* unexpected */
return -1;
}
}
#endif