summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMagnus Hagander2010-09-16 20:37:18 +0000
committerMagnus Hagander2010-09-29 14:06:24 +0000
commit26b01668cbd8bd1ad72b8eaca39f74323e5fbdc0 (patch)
tree4d8ad743fea0ed93ba0cd273aa1fbff9a5edd53f
parenta2e26a6f888a91da7efd7f59ca5d9b9383f2edd1 (diff)
Treat exit code 128 (ERROR_WAIT_NO_CHILDREN) as non-fatal on Win32,
since it can happen when a process fails to start when the system is under high load. Per several bug reports and many peoples investigation. Back-patch to 8.2, since testing shows no issues even though the "deadman-switch" does not exist in this version.
-rw-r--r--src/backend/postmaster/postmaster.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c
index 5e705a36b4f..bd0aeaf3aa7 100644
--- a/src/backend/postmaster/postmaster.c
+++ b/src/backend/postmaster/postmaster.c
@@ -2338,6 +2338,19 @@ CleanupBackend(int pid,
* assume everything is all right and simply remove the backend from the
* active backend list.
*/
+#ifdef WIN32
+ /*
+ * On win32, also treat ERROR_WAIT_NO_CHILDREN (128) as nonfatal
+ * case, since that sometimes happens under load when the process fails
+ * to start properly (long before it starts using shared memory).
+ */
+ if (exitstatus == ERROR_WAIT_NO_CHILDREN)
+ {
+ LogChildExit(LOG, _("server process"), pid, exitstatus);
+ exitstatus = 0;
+ }
+#endif
+
if (!EXIT_STATUS_0(exitstatus) && !EXIT_STATUS_1(exitstatus))
{
HandleChildCrash(pid, exitstatus, _("server process"));