Thanks you Andres for your time! this context is free with AllocSetReset rather than AllocSetDelete, that makes my breakpoint doesn't catch it.
On Wed, Feb 27, 2019 at 2:15 PM Andres Freund <andres@anarazel.de> wrote:
On 2019-02-27 14:08:47 +0800, Andy Fan wrote: > Hi : > I run a query like "select * from t" and set the break like this: > > break exec_simple_query > break MemoryContextDelete > commands > p context->name > c > end > > I can see most of the MemoryContext is relased, but never MessageContext, > when will it be released?
It's released above exec_simple_query, as it actually contains the data that lead us to call exec_simple_query(). See the main for loop in PostgresMain():
/* * Release storage left over from prior query cycle, and create a new * query input buffer in the cleared MessageContext. */ MemoryContextSwitchTo(MessageContext); MemoryContextResetAndDeleteChildren(MessageContext);