v20260407-0001-Unlock-ShmemIndexLock-before-calling-init_.patch
text/x-patch
Filename: v20260407-0001-Unlock-ShmemIndexLock-before-calling-init_.patch
Type: text/x-patch
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: format-patch
Series: patch v20260407-0001
Subject: Unlock ShmemIndexLock before calling init_fn callback
| File | + | − |
|---|---|---|
| src/backend/storage/ipc/shmem.c | 2 | 1 |
From f08bf94b4f18c7aea9c6e7d3f321c153da7a76d8 Mon Sep 17 00:00:00 2001
From: Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>
Date: Tue, 7 Apr 2026 19:24:15 +0530
Subject: [PATCH v20260407] Unlock ShmemIndexLock before calling init_fn
callback
CallShmemCallbacksAfterStartup() calls init_fn or attach_fn callbacks
while holding ShmemIndexLock. Those callbacks do not require the lock to
be held. Before d4885af3d65325c1fcd319e98c634fde9a200443, code
initializing the shared structures executed without holding
ShmemIndexLock.
On the other hand, those callbacks may be performing long running
operations like disk access e.g. pgss_shmem_init. Holding a lightweight
lock that long should be avoided, if possible. It will cause a delay in
loading an extension in all the backends since all attach_fns will be
serialized.
Author: Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>
---
src/backend/storage/ipc/shmem.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/backend/storage/ipc/shmem.c b/src/backend/storage/ipc/shmem.c
index 1ebffe5a32a..66b95713020 100644
--- a/src/backend/storage/ipc/shmem.c
+++ b/src/backend/storage/ipc/shmem.c
@@ -956,6 +956,8 @@ CallShmemCallbacksAfterStartup(const ShmemCallbacks *callbacks)
list_free_deep(pending_shmem_requests);
pending_shmem_requests = NIL;
+ LWLockRelease(ShmemIndexLock);
+
/* Finish by calling the appropriate subsystem-specific callback */
if (found_any)
{
@@ -968,7 +970,6 @@ CallShmemCallbacksAfterStartup(const ShmemCallbacks *callbacks)
callbacks->init_fn(callbacks->opaque_arg);
}
- LWLockRelease(ShmemIndexLock);
shmem_request_state = SRS_DONE;
}
base-commit: 29e7dbf5e4daa8fafc2b18a1551e7b31c8847340
--
2.34.1