mirror of
https://github.com/postgres/postgres.git
synced 2025-07-31 22:04:40 +03:00
Fix bug in parallel tidbitmap iteration.
Avoid computing idxpages[istate->spageptr] until after checking that istate->spageptr is a legal index. Dilip Kumar, per a report from David Rowley Discussion: http://postgr.es/m/CAKJS1f8OtrHE+-P+=E=4ycnL29e9idZKuaTQ6o2MbhvGN9D8ig@mail.gmail.com
This commit is contained in:
@ -1103,13 +1103,12 @@ tbm_shared_iterate(TBMSharedIterator *iterator)
|
|||||||
if (istate->schunkptr < istate->nchunks)
|
if (istate->schunkptr < istate->nchunks)
|
||||||
{
|
{
|
||||||
PagetableEntry *chunk = &ptbase[idxchunks[istate->schunkptr]];
|
PagetableEntry *chunk = &ptbase[idxchunks[istate->schunkptr]];
|
||||||
PagetableEntry *page = &ptbase[idxpages[istate->spageptr]];
|
|
||||||
BlockNumber chunk_blockno;
|
BlockNumber chunk_blockno;
|
||||||
|
|
||||||
chunk_blockno = chunk->blockno + istate->schunkbit;
|
chunk_blockno = chunk->blockno + istate->schunkbit;
|
||||||
|
|
||||||
if (istate->spageptr >= istate->npages ||
|
if (istate->spageptr >= istate->npages ||
|
||||||
chunk_blockno < page->blockno)
|
chunk_blockno < ptbase[idxpages[istate->spageptr]].blockno)
|
||||||
{
|
{
|
||||||
/* Return a lossy page indicator from the chunk */
|
/* Return a lossy page indicator from the chunk */
|
||||||
output->blockno = chunk_blockno;
|
output->blockno = chunk_blockno;
|
||||||
|
Reference in New Issue
Block a user