Re: make LWLockCounter a global variable
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Nathan Bossart <nathandbossart@gmail.com>
Cc: pgsql-hackers@postgresql.org
Date: 2025-08-28T21:56:07Z
Lists: pgsql-hackers
Nathan Bossart <nathandbossart@gmail.com> writes: > In lwlock.c, uses of LWLockCounter must first calculate its address in > shared memory with something like this: > LWLockCounter = (int *) ((char *) MainLWLockArray - sizeof(int)); > This appears to have been started by commit 82e861f in order to fix > EXEC_BACKEND builds, but it could also be fixed by adding it to the > BackendParameters struct. I find the current approach somewhat difficult > to read and understand, so I'd like to switch to the latter approach. This > is admittedly just nitpicking... No objection here. As a small improvement, perhaps you could swap around the code in LWLockShmemSize so that the order in which it considers size contributions matches the physical layout, more or less like /* Calculate total number of locks needed in the main array. */ numLocks += NumLWLocksForNamedTranches(); + /* Space for dynamic allocation counter, plus room for alignment. */ + size = sizeof(int) + LWLOCK_PADDED_SIZE; + /* Space for the LWLock array. */ - size = mul_size(numLocks, sizeof(LWLockPadded)); + size = add_size(size, mul_size(numLocks, sizeof(LWLockPadded))); - /* Space for dynamic allocation counter, plus room for alignment. */ - size = add_size(size, sizeof(int) + LWLOCK_PADDED_SIZE); - /* space for named tranches. */ size = add_size(size, mul_size(NamedLWLockTrancheRequests, sizeof(NamedLWLockTranche))); I find it a little confusing that that code doesn't line up exactly with what CreateLWLocks does. regards, tom lane
Commits
-
Make LWLockCounter a global variable.
- 67fcf48c3bb3 19 (unreleased) landed
-
Fix LWLockAssign() so that it can safely be executed after postmaster
- 82e861fbe1a1 8.1.0 cited