Commit 250c26ba authored by Robert Haas's avatar Robert Haas

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 68a2e52b.

To fix, move the relevant initialization steps from InitXLOGAccess()
to XLOGShmemInit(), making this more parallel to what we do
elsewhere.

Amit Kapila
parent 93a028f5
...@@ -4841,6 +4841,11 @@ XLOGShmemInit(void) ...@@ -4841,6 +4841,11 @@ XLOGShmemInit(void)
{ {
/* both should be present or neither */ /* both should be present or neither */
Assert(foundCFile && foundXLog); Assert(foundCFile && foundXLog);
/* Initialize local copy of WALInsertLocks and register the tranche */
WALInsertLocks = XLogCtl->Insert.WALInsertLocks;
LWLockRegisterTranche(XLogCtl->Insert.WALInsertLockTrancheId,
&XLogCtl->Insert.WALInsertLockTranche);
return; return;
} }
memset(XLogCtl, 0, sizeof(XLogCtlData)); memset(XLogCtl, 0, sizeof(XLogCtlData));
...@@ -7619,11 +7624,6 @@ InitXLOGAccess(void) ...@@ -7619,11 +7624,6 @@ InitXLOGAccess(void)
ThisTimeLineID = XLogCtl->ThisTimeLineID; ThisTimeLineID = XLogCtl->ThisTimeLineID;
Assert(ThisTimeLineID != 0 || IsBootstrapProcessingMode()); 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 */ /* Use GetRedoRecPtr to copy the RedoRecPtr safely */
(void) GetRedoRecPtr(); (void) GetRedoRecPtr();
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment