mirror of
https://github.com/postgres/postgres.git
synced 2025-05-17 06:41:24 +03: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
f12976ab83
commit
9f519faf80
@ -50,13 +50,28 @@ pgkill(int pid, int sig)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (GetLastError() == ERROR_FILE_NOT_FOUND)
|
switch (GetLastError())
|
||||||
errno = ESRCH;
|
{
|
||||||
else if (GetLastError() == ERROR_ACCESS_DENIED)
|
case ERROR_BROKEN_PIPE:
|
||||||
errno = EPERM;
|
case ERROR_BAD_PIPE:
|
||||||
else
|
|
||||||
errno = EINVAL;
|
/*
|
||||||
return -1;
|
* 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
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user