aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Haas <rhaas@postgresql.org>2014-07-24 09:04:59 -0400
committerRobert Haas <rhaas@postgresql.org>2014-07-24 09:12:38 -0400
commit250c26ba9cf247c2d5b8dbd2435a36d11382c43e (patch)
treeebe2f3ba60b4523e1f95af8789b6aabbbf19c1b6
parent93a028f569232fa498279841cb61ad11c2df5c85 (diff)
downloadpostgresql-250c26ba9cf247c2d5b8dbd2435a36d11382c43e.tar.gz
postgresql-250c26ba9cf247c2d5b8dbd2435a36d11382c43e.zip
Fix checkpointer crash in EXEC_BACKEND builds.
Nothing in the checkpointer calls InitXLOGAccess(), so WALInsertLocks never got initialized there. Without EXEC_BACKEND, it works anyway because the correct value is inherited from the postmaster, but with EXEC_BACKEND we've got a problem. The problem appears to have been introduced by commit 68a2e52bbaf98f136a96b3a0d734ca52ca440a95. To fix, move the relevant initialization steps from InitXLOGAccess() to XLOGShmemInit(), making this more parallel to what we do elsewhere. Amit Kapila
-rw-r--r--src/backend/access/transam/xlog.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c
index e4f9595ee5f..93f3ca2b2b7 100644
--- a/src/backend/access/transam/xlog.c
+++ b/src/backend/access/transam/xlog.c
@@ -4841,6 +4841,11 @@ XLOGShmemInit(void)
{
/* both should be present or neither */
Assert(foundCFile && foundXLog);
+
+ /* Initialize local copy of WALInsertLocks and register the tranche */
+ WALInsertLocks = XLogCtl->Insert.WALInsertLocks;
+ LWLockRegisterTranche(XLogCtl->Insert.WALInsertLockTrancheId,
+ &XLogCtl->Insert.WALInsertLockTranche);
return;
}
memset(XLogCtl, 0, sizeof(XLogCtlData));
@@ -7619,11 +7624,6 @@ InitXLOGAccess(void)
ThisTimeLineID = XLogCtl->ThisTimeLineID;
Assert(ThisTimeLineID != 0 || IsBootstrapProcessingMode());
- /* Initialize our copy of WALInsertLocks and register the tranche */
- WALInsertLocks = XLogCtl->Insert.WALInsertLocks;
- LWLockRegisterTranche(XLogCtl->Insert.WALInsertLockTrancheId,
- &XLogCtl->Insert.WALInsertLockTranche);
-
/* Use GetRedoRecPtr to copy the RedoRecPtr safely */
(void) GetRedoRecPtr();
}