aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xconfigure3
-rw-r--r--configure.in2
-rw-r--r--src/backend/postmaster/postmaster.c34
-rw-r--r--src/include/pg_config.h.in3
-rw-r--r--src/include/pg_config.h.win323
5 files changed, 12 insertions, 33 deletions
diff --git a/configure b/configure
index acec60c3a7a..9049ad015e9 100755
--- a/configure
+++ b/configure
@@ -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
diff --git a/configure.in b/configure.in
index 05e6324e8f1..a362cfdf5e3 100644
--- a/configure.in
+++ b/configure.in
@@ -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
diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c
index 913734fbd00..45f6ac624eb 100644
--- a/src/backend/postmaster/postmaster.c
+++ b/src/backend/postmaster/postmaster.c
@@ -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;
diff --git a/src/include/pg_config.h.in b/src/include/pg_config.h.in
index 5454efdcbe6..6521c6d5b95 100644
--- a/src/include/pg_config.h.in
+++ b/src/include/pg_config.h.in
@@ -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
diff --git a/src/include/pg_config.h.win32 b/src/include/pg_config.h.win32
index 9574a8bbc7e..8c232f67a0b 100644
--- a/src/include/pg_config.h.win32
+++ b/src/include/pg_config.h.win32
@@ -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