aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRobert Haas <rhaas@postgresql.org>2014-05-07 13:19:02 -0400
committerRobert Haas <rhaas@postgresql.org>2014-05-07 13:19:02 -0400
commite2ce9aa27bf20eff2d991d0267a15ea5f7024cd7 (patch)
tree5eb08d708daf72b6f8cd3ceac8a069d7f255dced /src
parent1891b415f0cf45d56f29af423598f8518754d675 (diff)
downloadpostgresql-e2ce9aa27bf20eff2d991d0267a15ea5f7024cd7.tar.gz
postgresql-e2ce9aa27bf20eff2d991d0267a15ea5f7024cd7.zip
Never crash-and-restart for bgworkers without shared memory access.
The motivation for a crash and restart cycle when a backend dies is that it might have corrupted shared memory on the way down; and we can't recover reliably except by reinitializing everything. But that doesn't apply to processes that don't touch shared memory. Currently, there's nothing to prevent a background worker that doesn't request shared memory access from touching shared memory anyway, but that's a separate bug. Previous to this commit, the coding in postmaster.c was inconsistent: an exit status other than 0 or 1 didn't provoke a crash-and-restart, but failure to release the postmaster child slot did. This change makes those cases consistent.
Diffstat (limited to 'src')
-rw-r--r--src/backend/postmaster/postmaster.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c
index 6d098874d9b..0c6a4271a60 100644
--- a/src/backend/postmaster/postmaster.c
+++ b/src/backend/postmaster/postmaster.c
@@ -2864,17 +2864,17 @@ CleanupBackgroundWorker(int pid,
HandleChildCrash(pid, exitstatus, namebuf);
return true;
}
- }
- if (!ReleasePostmasterChildSlot(rw->rw_child_slot))
- {
- /*
- * Uh-oh, the child failed to clean itself up. Treat as a crash
- * after all.
- */
- rw->rw_crashed_at = GetCurrentTimestamp();
- HandleChildCrash(pid, exitstatus, namebuf);
- return true;
+ if (!ReleasePostmasterChildSlot(rw->rw_child_slot))
+ {
+ /*
+ * Uh-oh, the child failed to clean itself up. Treat as a
+ * crash after all.
+ */
+ rw->rw_crashed_at = GetCurrentTimestamp();
+ HandleChildCrash(pid, exitstatus, namebuf);
+ return true;
+ }
}
/* Get it out of the BackendList and clear out remaining data */