On Thu, Dec 19, 2024 at 6:15 PM Richard Guo <guofenglinux@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