Hi all, While digging into the LWLock code, I have noticed that GetNamedLWLockTranche() assumes that its caller should hold the LWLock AddinShmemInitLock to prevent any kind of race conditions when initializing shmem areas, but we don't make sure that's the case.
The sole caller of GetNamedLWLockTranche() in core respects that, but out-of-core code may not be that careful. How about adding an assertion based on LWLockHeldByMeInMode() to make sure that the ShmemInit lock is taken when this routine is called, like in the attached? Thanks, -- Michael
diff --git a/src/backend/storage/lmgr/lwlock.c b/src/backend/storage/lmgr/lwlock.c index 315a78cda9..263b483251 100644 --- a/src/backend/storage/lmgr/lwlock.c +++ b/src/backend/storage/lmgr/lwlock.c @@ -599,6 +599,8 @@ GetNamedLWLockTranche(const char *tranche_name) int lock_pos; int i; + Assert(LWLockHeldByMeInMode(AddinShmemInitLock, LW_EXCLUSIVE)); + /* * Obtain the position of base address of LWLock belonging to requested * tranche_name in MainLWLockArray. LWLocks for named tranches are placed
signature.asc
Description: PGP signature