Fix off-by-one bug in LWLockRegisterTranche().

Original coding failed to enlarge the array as required if
the requested tranche_id was equal to LWLockTranchesAllocated.

In passing, fix poor style of not casting the result of (re)palloc.
This commit is contained in:
Tom Lane 2014-04-25 15:59:57 -04:00
parent 49137ec9d4
commit 4bfc5f1396

View File

@ -350,8 +350,9 @@ CreateLWLocks(void)
if (LWLockTrancheArray == NULL)
{
LWLockTranchesAllocated = 16;
LWLockTrancheArray = MemoryContextAlloc(TopMemoryContext,
LWLockTranchesAllocated * sizeof(LWLockTranche *));
LWLockTrancheArray = (LWLockTranche **)
MemoryContextAlloc(TopMemoryContext,
LWLockTranchesAllocated * sizeof(LWLockTranche *));
}
MainLWLockTranche.name = "main";
@ -423,11 +424,12 @@ LWLockRegisterTranche(int tranche_id, LWLockTranche *tranche)
{
int i = LWLockTranchesAllocated;
while (i < tranche_id)
while (i <= tranche_id)
i *= 2;
LWLockTrancheArray = repalloc(LWLockTrancheArray,
i * sizeof(LWLockTranche *));
LWLockTrancheArray = (LWLockTranche **)
repalloc(LWLockTrancheArray,
i * sizeof(LWLockTranche *));
LWLockTranchesAllocated = i;
}