aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRobert Haas <rhaas@postgresql.org>2017-03-09 12:13:48 -0500
committerRobert Haas <rhaas@postgresql.org>2017-03-09 12:13:48 -0500
commit6a468c343b31aabead7d3a5e11079bfcddbfd667 (patch)
tree66cc853132bf226752ed91850859ce53e6e53b5f /src
parent0ee92e1c9b570f90d043e5b033a19b67497ea1f6 (diff)
downloadpostgresql-6a468c343b31aabead7d3a5e11079bfcddbfd667.tar.gz
postgresql-6a468c343b31aabead7d3a5e11079bfcddbfd667.zip
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
Diffstat (limited to 'src')
-rw-r--r--src/backend/nodes/tidbitmap.c3
1 files changed, 1 insertions, 2 deletions
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;