mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-10-06 11:46:54 +02: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 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:
parent
44acd17605
commit
b28761cb31
@ -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…
Reference in New Issue
Block a user