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:
parent
49137ec9d4
commit
4bfc5f1396
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user