From 3372f1adad12bc70321fdf22f3c11ac67e429f63 Mon Sep 17 00:00:00 2001 From: Robert Haas Date: Thu, 24 Jul 2014 09:04:59 -0400 Subject: [PATCH] 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 --- src/backend/access/transam/xlog.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index c804a04cb6..609ad2e07b 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -4815,6 +4815,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)); @@ -7595,11 +7600,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(); }