On Sat, Jan 29, 2022 at 6:01 AM Andres Freund <and...@anarazel.de> wrote:
>
>
> > +     if (has_filter)
> > +     {
> > +             /* Create or reset the memory context for row filters */
> > +             if (entry->cache_expr_cxt == NULL)
> > +                     entry->cache_expr_cxt = 
> > AllocSetContextCreate(CacheMemoryContext,
> > +                                                                           
> >                                     "Row filter expressions",
> > +                                                                           
> >                                     ALLOCSET_DEFAULT_SIZES);
> > +             else
> > +                     MemoryContextReset(entry->cache_expr_cxt);
>
> I see this started before this patch, but I don't think it's a great idea that
> pgoutput does a bunch of stuff in CacheMemoryContext. That makes it
> unnecessarily hard to debug leaks.
>
> Seems like all this should live somwhere below ctx->context, allocated in
> pgoutput_startup()?
>

Agreed.

> Consider what happens in a long-lived replication connection, where
> occasionally there's a transient error causing streaming to stop. At that
> point you'll just loose all knowledge of entry->cache_expr_cxt, no?
>

I think we will lose knowledge because the WALSender exits on ERROR
but that would be true even when we allocate it in this new allocated
context. Am, I missing something?

-- 
With Regards,
Amit Kapila.


Reply via email to