Remove support for using wait3() in place of waitpid().
All Unix-oid platforms that we currently support should have waitpid(), since it's in V2 of the Single Unix Spec. Our git history shows that the wait3 code was added to support NextStep, which we officially dropped support for as of 9.2. So get rid of the configure test, and simplify the macro spaghetti in reaper(). Per suggestion from Fujii Masao.
This commit is contained in:
parent
666d494d19
commit
fc548b2296
3
configure
vendored
3
configure
vendored
@ -19254,8 +19254,7 @@ fi
|
||||
|
||||
|
||||
|
||||
|
||||
for ac_func in cbrt dlopen fdatasync getifaddrs getpeerucred getrlimit memmove poll pstat readlink setproctitle setsid sigprocmask symlink towlower utime utimes waitpid wcstombs wcstombs_l
|
||||
for ac_func in cbrt dlopen fdatasync getifaddrs getpeerucred getrlimit memmove poll pstat readlink setproctitle setsid sigprocmask symlink towlower utime utimes wcstombs wcstombs_l
|
||||
do
|
||||
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
|
||||
{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
|
||||
|
@ -1207,7 +1207,7 @@ PGAC_VAR_INT_TIMEZONE
|
||||
AC_FUNC_ACCEPT_ARGTYPES
|
||||
PGAC_FUNC_GETTIMEOFDAY_1ARG
|
||||
|
||||
AC_CHECK_FUNCS([cbrt dlopen fdatasync getifaddrs getpeerucred getrlimit memmove poll pstat readlink setproctitle setsid sigprocmask symlink towlower utime utimes waitpid wcstombs wcstombs_l])
|
||||
AC_CHECK_FUNCS([cbrt dlopen fdatasync getifaddrs getpeerucred getrlimit memmove poll pstat readlink setproctitle setsid sigprocmask symlink towlower utime utimes wcstombs wcstombs_l])
|
||||
|
||||
AC_REPLACE_FUNCS(fseeko)
|
||||
case $host_os in
|
||||
|
@ -377,7 +377,9 @@ static void InitPostmasterDeathWatchHandle(void);
|
||||
#ifdef EXEC_BACKEND
|
||||
|
||||
#ifdef WIN32
|
||||
static pid_t win32_waitpid(int *exitstatus);
|
||||
#define WNOHANG 0 /* ignored, so any integer value will do */
|
||||
|
||||
static pid_t waitpid(pid_t pid, int *exitstatus, int options);
|
||||
static void WINAPI pgwin32_deadchild_callback(PVOID lpParameter, BOOLEAN TimerOrWaitFired);
|
||||
|
||||
static HANDLE win32ChildQueue;
|
||||
@ -388,7 +390,7 @@ typedef struct
|
||||
HANDLE procHandle;
|
||||
DWORD procId;
|
||||
} win32_deadchild_waitinfo;
|
||||
#endif
|
||||
#endif /* WIN32 */
|
||||
|
||||
static pid_t backend_forkexec(Port *port);
|
||||
static pid_t internal_forkexec(int argc, char *argv[], Port *port);
|
||||
@ -2268,33 +2270,13 @@ reaper(SIGNAL_ARGS)
|
||||
int pid; /* process id of dead child process */
|
||||
int exitstatus; /* its exit status */
|
||||
|
||||
/* These macros hide platform variations in getting child status */
|
||||
#ifdef HAVE_WAITPID
|
||||
int status; /* child exit status */
|
||||
|
||||
#define LOOPTEST() ((pid = waitpid(-1, &status, WNOHANG)) > 0)
|
||||
#define LOOPHEADER() (exitstatus = status)
|
||||
#else /* !HAVE_WAITPID */
|
||||
#ifndef WIN32
|
||||
union wait status; /* child exit status */
|
||||
|
||||
#define LOOPTEST() ((pid = wait3(&status, WNOHANG, NULL)) > 0)
|
||||
#define LOOPHEADER() (exitstatus = status.w_status)
|
||||
#else /* WIN32 */
|
||||
#define LOOPTEST() ((pid = win32_waitpid(&exitstatus)) > 0)
|
||||
#define LOOPHEADER()
|
||||
#endif /* WIN32 */
|
||||
#endif /* HAVE_WAITPID */
|
||||
|
||||
PG_SETMASK(&BlockSig);
|
||||
|
||||
ereport(DEBUG4,
|
||||
(errmsg_internal("reaping dead processes")));
|
||||
|
||||
while (LOOPTEST())
|
||||
while ((pid = waitpid(-1, &exitstatus, WNOHANG)) > 0)
|
||||
{
|
||||
LOOPHEADER();
|
||||
|
||||
/*
|
||||
* Check if this child was a startup process.
|
||||
*/
|
||||
@ -5045,8 +5027,12 @@ ShmemBackendArrayRemove(Backend *bn)
|
||||
|
||||
#ifdef WIN32
|
||||
|
||||
/*
|
||||
* Subset implementation of waitpid() for Windows. We assume pid is -1
|
||||
* (that is, check all child processes) and options is WNOHANG (don't wait).
|
||||
*/
|
||||
static pid_t
|
||||
win32_waitpid(int *exitstatus)
|
||||
waitpid(pid_t pid, int *exitstatus, int options)
|
||||
{
|
||||
DWORD dwd;
|
||||
ULONG_PTR key;
|
||||
|
@ -614,9 +614,6 @@
|
||||
/* Define to 1 if you have the `vsnprintf' function. */
|
||||
#undef HAVE_VSNPRINTF
|
||||
|
||||
/* Define to 1 if you have the `waitpid' function. */
|
||||
#undef HAVE_WAITPID
|
||||
|
||||
/* Define to 1 if you have the <wchar.h> header file. */
|
||||
#undef HAVE_WCHAR_H
|
||||
|
||||
|
@ -505,9 +505,6 @@
|
||||
/* Define to 1 if you have the `vsnprintf' function. */
|
||||
#define HAVE_VSNPRINTF 1
|
||||
|
||||
/* Define to 1 if you have the `waitpid' function. */
|
||||
/* #undef HAVE_WAITPID */
|
||||
|
||||
/* Define to 1 if you have the <wchar.h> header file. */
|
||||
#define HAVE_WCHAR_H 1
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user