1
0
mirror of https://github.com/postgres/postgres.git synced 2026-10-23 13:29:09 +03:00

Add an init callback for the logical decoding control data.

LogicalDecodingCtl had no init callback so there is no guarantee that
its fields are initialized. Its startup function
StartupLogicalDecodingStatus() also returns without touching the
fields when wal_level is 'minimal'.

Initialize them in an init callback explicitly. This is not a bug fix
but we just shouldn't be depending on the allocator by accident.

Backpatch to v19, where logicalctl.c was introduced, since a
subsequent bug fix for slot synchronization adds a new field to
LogicalDecodingCtlData and relies on this callback to initialize it.

Reviewed-by: shveta malik <shveta.malik@gmail.com>
Reviewed-by: Nisha Moond <nisha.moond412@gmail.com>
Discussion: https://postgr.es/m/CAM527d_eV_BAYFiQnfZLSPfHoihye=nOi-OnAM_57pdH+F+gfA@mail.gmail.com
Backpatch-through: 19
This commit is contained in:
Masahiko Sawada
2026-10-07 11:09:12 -07:00
parent 53c8cfc253
commit 5412127cbf

View File

@@ -100,9 +100,11 @@ typedef struct LogicalDecodingCtlData
static LogicalDecodingCtlData *LogicalDecodingCtl = NULL;
static void LogicalDecodingCtlShmemRequest(void *arg);
static void LogicalDecodingCtlShmemInit(void *arg);
const ShmemCallbacks LogicalDecodingCtlShmemCallbacks = {
.request_fn = LogicalDecodingCtlShmemRequest,
.init_fn = LogicalDecodingCtlShmemInit,
};
/*
@@ -136,6 +138,14 @@ LogicalDecodingCtlShmemRequest(void *arg)
);
}
static void
LogicalDecodingCtlShmemInit(void *arg)
{
LogicalDecodingCtl->xlog_logical_info = false;
LogicalDecodingCtl->logical_decoding_enabled = false;
LogicalDecodingCtl->pending_disable = false;
}
/*
* Initialize the logical decoding status in shmem at server startup. This
* must be called ONCE during postmaster or standalone-backend startup.