On Thu, Dec 19, 2024 at 10:23 AM Melanie Plageman
<melanieplage...@gmail.com> wrote:
>
> On Thu, Dec 19, 2024 at 10:12 AM Richard Guo <guofengli...@gmail.com> wrote:
> >
> > 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! I'm working on the fix and adding the test case you found.

Okay, pushed. Thanks so much, Richard. I also noticed another
oversight and fixed it.

- Melanie


Reply via email to