diff options
Diffstat (limited to 'src/backend/executor/nodeBitmapHeapscan.c')
-rw-r--r-- | src/backend/executor/nodeBitmapHeapscan.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/backend/executor/nodeBitmapHeapscan.c b/src/backend/executor/nodeBitmapHeapscan.c index a7cbaf1660e..928c94cab6a 100644 --- a/src/backend/executor/nodeBitmapHeapscan.c +++ b/src/backend/executor/nodeBitmapHeapscan.c @@ -572,9 +572,11 @@ ExecReScanBitmapHeapScan(BitmapHeapScanState *node) if (scan) { /* - * End iteration on iterators saved in scan descriptor. + * End iteration on iterators saved in scan descriptor if they have + * not already been cleaned up. */ - tbm_end_iterate(&scan->st.rs_tbmiterator); + if (!tbm_exhausted(&scan->st.rs_tbmiterator)) + tbm_end_iterate(&scan->st.rs_tbmiterator); /* rescan to release any page pin */ table_rescan(node->ss.ss_currentScanDesc, NULL); @@ -654,9 +656,11 @@ ExecEndBitmapHeapScan(BitmapHeapScanState *node) if (scanDesc) { /* - * End iteration on iterators saved in scan descriptor. + * End iteration on iterators saved in scan descriptor if they have + * not already been cleaned up. */ - tbm_end_iterate(&scanDesc->st.rs_tbmiterator); + if (!tbm_exhausted(&scanDesc->st.rs_tbmiterator)) + tbm_end_iterate(&scanDesc->st.rs_tbmiterator); /* * close table scan |