On Thu, Dec 19, 2024 at 6:15 PM Richard Guo <guofengli...@gmail.com> wrote: > I think we need to check whether rs_tbmiterator is NULL before calling > tbm_end_iterate on it, like below. > > --- 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 > + * haven't 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);
This change may also be needed in ExecEndBitmapHeapScan(). Thanks Richard