Fix use of wrong variable in _hash_kill_items()

In 82467f627bd I somehow ended up using 'so->currPos.buf' instead of the 'buf'
variable, which is incorrect when the buffer is not already pinned. At the
very least this can lead to assertion failures

Unfortunately this shows that this code path was not covered. Expand
src/test/modules/index/specs/killtuples.spec to test it.  Until now the
'result' step always reported either a 0 or 1 buffer accesses, but when
exercising hash overflows, more buffers are accessed.  To avoid depending on
the precise number of accesses, change the result step to return whether there
were any heap accesses. That makes the change a lot more verbose, but still
seems worth it.

Reported-by: Alexander Kuzmenkov <[email protected]>
Reported-by: Alexander Lakhin <[email protected]>
Reported-by: Heikki Linnakangas <[email protected]>
Discussion: 
https://postgr.es/m/vjtmvwvbxt7w5uyacxpzibpj65ewcb7uqaqbhd4arvnjbp5jqz%405ksdh6fsyqve
Discussion: https://postgr.es/m/[email protected]

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/f5eb854ab6d6281ec2d3143657944bdda6676341

Modified Files
--------------
src/backend/access/hash/hashutil.c             |   4 +-
src/test/modules/index/expected/killtuples.out | 219 +++++++++++++++++--------
src/test/modules/index/specs/killtuples.spec   |  15 +-
3 files changed, 163 insertions(+), 75 deletions(-)

Reply via email to