mirror of
https://github.com/postgres/postgres.git
synced 2026-04-15 22:10:45 -04:00
Move ShmemIndexLock into ShmemAllocator
This makes shmem.c independent of the main LWLock array. That makes it possible to stop passing MainLWLockArray through BackendParameters in the next commit. Reviewed-by: Nathan Bossart <nathandbossart@gmail.com> Discussion: https://www.postgresql.org/message-id/47aaf57e-1b7b-4e12-bda2-0316081ff50e@iki.fi
This commit is contained in:
parent
12e3e0f2c8
commit
06d859aaf4
3 changed files with 13 additions and 7 deletions
|
|
@ -90,12 +90,16 @@
|
|||
typedef struct ShmemAllocatorData
|
||||
{
|
||||
Size free_offset; /* offset to first free space from ShmemBase */
|
||||
HASHHDR *index; /* location of ShmemIndex */
|
||||
|
||||
/* protects shared memory and LWLock allocation */
|
||||
/* protects 'free_offset' */
|
||||
slock_t shmem_lock;
|
||||
|
||||
HASHHDR *index; /* location of ShmemIndex */
|
||||
LWLock index_lock; /* protects ShmemIndex */
|
||||
} ShmemAllocatorData;
|
||||
|
||||
#define ShmemIndexLock (&ShmemAllocator->index_lock)
|
||||
|
||||
static void *ShmemAllocRaw(Size size, Size *allocated_size);
|
||||
|
||||
/* shared memory global variables */
|
||||
|
|
@ -154,15 +158,16 @@ InitShmemAllocator(PGShmemHeader *seghdr)
|
|||
|
||||
/*
|
||||
* In postmaster or stand-alone backend, initialize the shared memory
|
||||
* allocator and the spinlock so that we can allocate shared memory for
|
||||
* ShmemIndex using ShmemAlloc(). In a regular backend just set up the
|
||||
* pointers required by ShmemAlloc().
|
||||
* allocator so that we can allocate shared memory for ShmemIndex using
|
||||
* ShmemAlloc(). In a regular backend just set up the pointers required
|
||||
* by ShmemAlloc().
|
||||
*/
|
||||
ShmemAllocator = (ShmemAllocatorData *) ((char *) seghdr + seghdr->content_offset);
|
||||
if (!IsUnderPostmaster)
|
||||
{
|
||||
SpinLockInit(&ShmemAllocator->shmem_lock);
|
||||
ShmemAllocator->free_offset = offset;
|
||||
LWLockInitialize(&ShmemAllocator->index_lock, LWTRANCHE_SHMEM_INDEX);
|
||||
}
|
||||
|
||||
ShmemSegHdr = seghdr;
|
||||
|
|
|
|||
|
|
@ -321,7 +321,6 @@ ABI_compatibility:
|
|||
|
||||
Section: ClassName - WaitEventLWLock
|
||||
|
||||
ShmemIndex "Waiting to find or allocate space in shared memory."
|
||||
OidGen "Waiting to allocate a new OID."
|
||||
XidGen "Waiting to allocate a new transaction ID."
|
||||
ProcArray "Waiting to access the shared per-process data structures (typically, to get a snapshot or report a session's transaction ID)."
|
||||
|
|
@ -412,6 +411,7 @@ SubtransSLRU "Waiting to access the sub-transaction SLRU cache."
|
|||
XactSLRU "Waiting to access the transaction status SLRU cache."
|
||||
ParallelVacuumDSA "Waiting for parallel vacuum dynamic shared memory allocation."
|
||||
AioUringCompletion "Waiting for another process to complete IO via io_uring."
|
||||
ShmemIndex "Waiting to find or allocate space in shared memory."
|
||||
|
||||
# No "ABI_compatibility" region here as WaitEventLWLock has its own C code.
|
||||
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@
|
|||
*/
|
||||
|
||||
/* 0 is available; was formerly BufFreelistLock */
|
||||
PG_LWLOCK(1, ShmemIndex)
|
||||
/* 1 was ShmemIndex */
|
||||
PG_LWLOCK(2, OidGen)
|
||||
PG_LWLOCK(3, XidGen)
|
||||
PG_LWLOCK(4, ProcArray)
|
||||
|
|
@ -137,3 +137,4 @@ PG_LWLOCKTRANCHE(SUBTRANS_SLRU, SubtransSLRU)
|
|||
PG_LWLOCKTRANCHE(XACT_SLRU, XactSLRU)
|
||||
PG_LWLOCKTRANCHE(PARALLEL_VACUUM_DSA, ParallelVacuumDSA)
|
||||
PG_LWLOCKTRANCHE(AIO_URING_COMPLETION, AioUringCompletion)
|
||||
PG_LWLOCKTRANCHE(SHMEM_INDEX, ShmemIndex)
|
||||
|
|
|
|||
Loading…
Reference in a new issue