v1-0001-Add-NULL-check-for-apply-worker-in-update-deleted.patch
application/octet-stream
Filename: v1-0001-Add-NULL-check-for-apply-worker-in-update-deleted.patch
Type: application/octet-stream
Part: 0
Patch
Format: format-patch
Series: patch v1-0001
Subject: Add NULL check for apply worker in update-deleted
| File | + | − |
|---|---|---|
| src/backend/replication/logical/worker.c | 6 | 0 |
From 63a769cb1c9eb06a953c3c2e8ff2e570c26c389f Mon Sep 17 00:00:00 2001
From: Shveta Malik <shveta.malik@gmail.com>
Date: Mon, 8 Sep 2025 15:49:02 +0530
Subject: [PATCH v1] Add NULL check for apply worker in update-deleted
Add NULL check for leader apply worker in the update-deleted detection
flow to prevent SIGSEGV when the tablesync worker is applying changes and
attempting to locate a deleted row.
---
src/backend/replication/logical/worker.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/src/backend/replication/logical/worker.c b/src/backend/replication/logical/worker.c
index c0f6bef5c28..e30b278109a 100644
--- a/src/backend/replication/logical/worker.c
+++ b/src/backend/replication/logical/worker.c
@@ -3272,6 +3272,12 @@ FindDeletedTupleInLocalRel(Relation localrel, Oid localidxoid,
LWLockAcquire(LogicalRepWorkerLock, LW_SHARED);
leader = logicalrep_worker_find(MyLogicalRepWorker->subid,
InvalidOid, false);
+ if (!leader)
+ {
+ ereport(ERROR,
+ (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
+ errmsg("could not detect conflict as the leader apply worker has exited")));
+ }
SpinLockAcquire(&leader->relmutex);
oldestxmin = leader->oldest_nonremovable_xid;
--
2.34.1