From: Robert Haas Date: Thu, 9 Mar 2017 17:13:48 +0000 (-0500) Subject: Fix bug in parallel tidbitmap iteration. X-Git-Tag: REL_10_BETA1~712 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6a468c343b31aabead7d3a5e11079bfcddbfd667;p=thirdparty%2Fpostgresql.git 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 --- diff --git a/src/backend/nodes/tidbitmap.c b/src/backend/nodes/tidbitmap.c index 44cc9daa03f..8e915646d93 100644 --- a/src/backend/nodes/tidbitmap.c +++ b/src/backend/nodes/tidbitmap.c @@ -1103,13 +1103,12 @@ tbm_shared_iterate(TBMSharedIterator *iterator) if (istate->schunkptr < istate->nchunks) { PagetableEntry *chunk = &ptbase[idxchunks[istate->schunkptr]]; - PagetableEntry *page = &ptbase[idxpages[istate->spageptr]]; BlockNumber chunk_blockno; chunk_blockno = chunk->blockno + istate->schunkbit; if (istate->spageptr >= istate->npages || - chunk_blockno < page->blockno) + chunk_blockno < ptbase[idxpages[istate->spageptr]].blockno) { /* Return a lossy page indicator from the chunk */ output->blockno = chunk_blockno;