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 <samimseih@gmail.com>
Discussion: https://www.postgresql.org/message-id/
463a28db-0c0b-4af6-bac6-
3891828bbbfe@iki.fi
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