> I found some code path use list_delete_ptr while the loop of foreach() is
> iterating.
>
> List_delete_ptr seems search the list again to find the target cell and
> delete it.
> > foreach(cell, list)
> > {
> > if (lfirst(cell) == datum)
> > return list_delete_cell(list, cell);
> > }
>
>
> If we already get the cell in foreach loop, I think we can use
> list_delete_cell to avoid searching the list again.
>
> Please see the attachment for the patch.
I have added it to commitfest.
https://commitfest.postgresql.org/30/2761/
Best regards.