Clean up NamedLWLockTranche stuff
Heikki Linnakangas <hlinnaka@iki.fi>
From: Heikki Linnakangas <hlinnaka@iki.fi>
To: Nathan Bossart <nathandbossart@gmail.com>,
Robert Haas <robertmhaas@gmail.com>,
"pgsql-hackers@postgresql.org" <pgsql-hackers@postgresql.org>
Date: 2026-03-26T12:16:52Z
Lists: pgsql-hackers
Attachments
- v1-0001-Rename-MAX_NAMED_TRANCHES-to-MAX_USER_DEFINED_TRA.patch (text/x-patch) patch v1-0001
- v1-0002-Refactor-how-user-defined-LWLock-tranches-are-sto.patch (text/x-patch) patch v1-0002
- v1-0003-Use-a-separate-spinlock-to-protect-LWLockTranches.patch (text/x-patch) patch v1-0003
- v1-0004-Use-ShmemInitStruct-to-allocate-lwlock.c-s-shared.patch (text/x-patch) patch v1-0004
- v1-0005-Move-ShmemIndexLock-into-ShmemAllocator.patch (text/x-patch) patch v1-0005
While working on the new shmem allocation functions, I looked at how the NamedLWLockTranche stuff works now in lwlock.c, and I have to say it's a bit of a mess. What is a "named tranche"? It usually means tranches requested with RequestNamedLWLockTranche() at postmaster startup. But all tranches have a name. LWLockTrancheNames includes all user-defined tranches, also ones assigned with LWLockNewTrancheId(), and MAX_NAMED_TRANCHES is the maximum for all of them. At postmaster startup, NamedLWLockTrancheRequests points to a backend-private array. But after startup, and always in backends, it points to a copy in shared memory and LocalNamedLWLockTrancheRequestArray is used to hold the original. It took me a while to realize that NamedLWLockTrancheRequests in shared memory is *not* updated when you call LWLockNewTrancheId(), it only holds the requests made with RequestNamedLWLockTranche() before startup. I propose the attached refactorings to make this less confusing. See commit messages for details. - Heikki
Commits
-
Fix outdated comment on MainLWLockArray
- bd365b1ae510 19 (unreleased) landed
-
Fix RequestNamedLWLockTranche in single-user mode
- 2407c8db159d 19 (unreleased) landed
-
Minor comment fixes to yesterday's LWLock tranche refactoring
- 98993150c0a4 19 (unreleased) landed
-
Move ShmemIndexLock into ShmemAllocator
- 06d859aaf4e9 19 (unreleased) landed
-
Use ShmemInitStruct to allocate lwlock.c's shared memory
- 30d432502bf4 19 (unreleased) landed
-
Use a separate spinlock to protect LWLockTranches
- 12e3e0f2c8f7 19 (unreleased) landed
-
Refactor how user-defined LWLock tranches are stored in shmem
- d6eba30a245c 19 (unreleased) landed
-
Rename MAX_NAMED_TRANCHES to MAX_USER_DEFINED_TRANCHES
- cc88481aeb98 19 (unreleased) landed
-
Fix re-initialization of LWLock-related shared memory.
- c3cc2ab87d72 19 (unreleased) cited