From: Heikki Linnakangas Date: Sun, 5 Apr 2026 18:05:20 +0000 (+0300) Subject: Check that the tranche name is unique in RequestNamedLWLockTranche X-Git-Tag: REL_19_BETA1~486 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f10b6be2581f879f24a4830443bab356ec6d71c5;p=thirdparty%2Fpostgresql.git Check that the tranche name is unique in RequestNamedLWLockTranche You could request two tranches with same name, but things would get confusing when you called GetNamedLWLockTranche() to get the LWLocks allocated for them; it would always return the first tranche with the name. That doesn't make sense, so forbid duplicates. We still allow duplicates with LWLockNewTrancheId(). That works better as you don't use the name to look up the tranche ID later. It's still confusing in wait events, for example, but it's not dangerous in the same way. Reviewed-by: Sami Imseih Discussion: https://www.postgresql.org/message-id/463a28db-0c0b-4af6-bac6-3891828bbbfe@iki.fi --- diff --git a/src/backend/storage/lmgr/lwlock.c b/src/backend/storage/lmgr/lwlock.c index 5cb696490d6..98138cb09d1 100644 --- a/src/backend/storage/lmgr/lwlock.c +++ b/src/backend/storage/lmgr/lwlock.c @@ -649,6 +649,13 @@ RequestNamedLWLockTranche(const char *tranche_name, int num_lwlocks) errdetail("No more than %d tranches may be registered.", MAX_USER_DEFINED_TRANCHES))); + /* Check that the name isn't already in use */ + foreach_ptr(NamedLWLockTrancheRequest, existing, NamedLWLockTrancheRequests) + { + if (strcmp(existing->tranche_name, tranche_name) == 0) + elog(ERROR, "requested tranche \"%s\" is already registered", tranche_name); + } + if (IsPostmasterEnvironment) oldcontext = MemoryContextSwitchTo(PostmasterContext); else