Bounds error in LockMethodInit().
In lmgr.c you have a static LOCKMASK LockConflicts[] with 9
elements in it.
You call LockMethodTableInit() with that pointer, and
MAX_LOCKMODES - 1 (10 - 1 = 9)
That calls LockMethodInit with the same arguments, but it does
numModes++.
So you basicly have a for loop that looks like:
for (i = 0; i < 10; i++, conflictsP++)
The last item you try to copy is conflictsP is not within the
the LockConflicts array anymore.
I have no idea what that numModes++ line is doing there.
Kurt
Kurt Roeckx <Q@ping.be> writes:
I have no idea what that numModes++ line is doing there.
I think the notion is that the lock modes are counted in 1-based
numbering; the copy loop starts at 0 so it needs an extra iteration.
Look at the uses of numLockModes for evidence. (Note the extra zero
at the start of LockConflicts[]. Why it's bothering to copy that,
I dunno.)
I agree the call from lmgr.c is bogus though --- should be doing
something involving lengthof(LockConflicts), probably. The existing
coding would fail to raise a flag if someone added a few more lock
modes without increasing MAX_LOCKMODES.
regards, tom lane