Re: BUG #19026: ResourceOwnerForget can't find owner for invalid plancache

Поиск
Список
Период
Сортировка
От Kirill Reshke
Тема Re: BUG #19026: ResourceOwnerForget can't find owner for invalid plancache
Дата
Msg-id CALdSSPijvR-X693FPJfT2==7Otb=Ft6NrPQ02r4i1c8MnW_8tQ@mail.gmail.com
обсуждение исходный текст
Ответ на Re: BUG #19026: ResourceOwnerForget can't find owner for invalid plancache  (Dilip Kumar <dilipbalaut@gmail.com>)
Ответы Re: BUG #19026: ResourceOwnerForget can't find owner for invalid plancache
Список pgsql-bugs
Hi!


First of all, Alexander, thank you for the excellent bug report!

On Wed, 20 Aug 2025 at 16:21, Dilip Kumar <dilipbalaut@gmail.com> wrote:
>
> > ERROR:  XX000: plancache reference 0x643ae41a7d98 is not owned by resource
> > owner Portal
> > CONTEXT:  SQL function "part_hashint4_noop" during startup
> > LOCATION:  ResourceOwnerForget, resowner.c:618
>
> The problem is in init_execution_state() we store the
>
> On error resource owner will be released, but that references are
> still maintained in the plan and cowner in fcache, but on error the
> transaction will be aborted and this resource owner will be released.
> So next time when we try to clean up, it will access invalid memory.
> So a simple fix would be to cleanup on error as attached POC.
>
> --
> Regards,
> Dilip Kumar
> Google

As for the patch: should we add some regression test for this?
Also, I'm not terribly sure  what this fix does is the right thing to do.
Doesn’t it break some layer of abstraction here? My understanding is
that on transaction rollback, all resources should be freed in the
ResourceOwnerRelease
function and friends. Namely, the ReleaseCachedPlan call we make
before elog(ERROR) is breaking logic. Am I wrong?
For this sql cache there exists sql_exec_error_callback, which is
probably a better place to clean up on error.

How about attached?


--
Best regards,
Kirill Reshke

Вложения

В списке pgsql-bugs по дате отправления: