Re: Improve LWLock tranche name visibility across backends
Sami Imseih <samimseih@gmail.com>
From: Sami Imseih <samimseih@gmail.com>
To: Bertrand Drouvot <bertranddrouvot.pg@gmail.com>
Cc: Nathan Bossart <nathandbossart@gmail.com>,
Rahila Syed <rahilasyed90@gmail.com>, pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2025-08-17T03:18:05Z
Lists: pgsql-hackers
Attachments
- v8-0002-Add-tests-for-LWLock-tranche-names-DSA.patch (application/octet-stream) patch v8-0002
- v8-0001-Implement-a-DSA-for-LWLock-tranche-names.patch (application/octet-stream) patch v8-0001
>> See v7.
I fixed an earlier issue with Windows, which was due to not initializing the
shared memory inside
```
#ifdef EXEC_BACKEND
extern void AttachSharedMemoryStructs(void);
#endif
```
But then I found another one after. LWLockTrancheNames gets forked on Linux,
but of course that will not happen on Windows without extra work. So, the
tests failed because the requested tranches (via RequestNamedLWLockTranche)
were not being found when looked up.
But of course, we already have provisions to copy these tranches for
Windows ( see inside launch_backend.c ).
```
int NamedLWLockTrancheRequests;
NamedLWLockTranche *NamedLWLockTrancheArray;
LWLockPadded *MainLWLockArray;
```
So, this means that for the local memory sync, we can actually just copy the
requested tranches (via RequestNamedLWLockTranche) and then the shared memory
tranches. This is much better, as it syncs using both possible sources
for tranche names.
```
int i = 0;
while (i < NamedLWLockTrancheRequests)
{
NamedLWLockTranche *tranche;
tranche = &NamedLWLockTrancheArray[i];
SetLocalTrancheName(i, tranche->trancheName);
i++;
}
/* Acquire shared lock on tranche names shared memory */
LWLockAcquire(&LWLockTrancheNames.shmem->lock, LW_SHARED);
while (i < LWLockTrancheNames.shmem->allocated)
{
```
So, now these tests pass locally on Windows.
Attached is v8.
--
Sami
Commits
-
test_dsa: Avoid leaking LWLock tranches.
- c5c74282f2ea 19 (unreleased) landed
-
Teach DSM registry to ERROR if attaching to an uninitialized entry.
- b26d76f64327 18.2 landed
- ac2800ddc185 17.8 landed
- 1165a933aab1 19 (unreleased) landed
-
Add a test harness for the LWLock tranche code.
- 16607718c010 19 (unreleased) landed
-
Revert recent change to RequestNamedLWLockTranche().
- d814d7fc3d52 19 (unreleased) landed
-
Move dynamically-allocated LWLock tranche names to shared memory.
- 38b602b0289f 19 (unreleased) landed
-
Prepare DSM registry for upcoming changes to LWLock tranche names.
- 5487058b56e0 19 (unreleased) landed
-
Add GetNamedDSA() and GetNamedDSHash().
- fe07100e82b0 19 (unreleased) cited