mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-03-13 19:57:53 +08:00
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 d7cdf6ee36adeac9233678fb8f2a112e6678a770 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:
parent
31f9bbf059
commit
0ea1f2a3a8
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user