Thread: Storing MemoryContext Pointers

Storing MemoryContext Pointers

From
Volkan YAZICI
Date:
Hi,

When I allocate a new memory context via
 oldmcxt = AllocSetContextCreate(TopMemoryContext, ...) persistent_mcxt = CurrentMemoryContext;

How can I store the persistent_mcxt in a persistent place that I'll be
able to reach it in my next getting invoked? Is that possible? If not,
how can I reach my previously created persistent data in my next
invocation?


Regards.


Re: Storing MemoryContext Pointers

From
Tom Lane
Date:
Volkan YAZICI <yazicivo@ttnet.net.tr> writes:
> When I allocate a new memory context via

>   oldmcxt = AllocSetContextCreate(TopMemoryContext, ...)
>   persistent_mcxt = CurrentMemoryContext;

ITYM
   persistent_mcxt = AllocSetContextCreate(TopMemoryContext, ...)

because the other doesn't do what you think...

> How can I store the persistent_mcxt in a persistent place that I'll be
> able to reach it in my next getting invoked?

Make it a static variable.
        regards, tom lane


Re: Storing MemoryContext Pointers

From
Volkan YAZICI
Date:
On Oct 05 03:34, Tom Lane wrote:
> Volkan YAZICI <yazicivo@ttnet.net.tr> writes:
> > When I allocate a new memory context via
> 
> >   oldmcxt = AllocSetContextCreate(TopMemoryContext, ...)
> >   persistent_mcxt = CurrentMemoryContext;
> 
> ITYM
> 
>     persistent_mcxt = AllocSetContextCreate(TopMemoryContext, ...)

Opps! Right. (I was looking at some MemoryContextSwitchTo() code while
typing above lines.)

> because the other doesn't do what you think...
> 
> > How can I store the persistent_mcxt in a persistent place that I'll be
> > able to reach it in my next getting invoked?
> 
> Make it a static variable.

I had thought some kind of fcinfo->flinfo->fn_extra trick but... a
static variable is fair enough too.

Thanks so much for the answer (also for your reply to caching subjected
post).


Regards.


Re: Storing MemoryContext Pointers

From
Tom Lane
Date:
Volkan YAZICI <yazicivo@ttnet.net.tr> writes:
> On Oct 05 03:34, Tom Lane wrote:
>> Volkan YAZICI <yazicivo@ttnet.net.tr> writes:
>>> How can I store the persistent_mcxt in a persistent place that I'll be
>>> able to reach it in my next getting invoked?
>> 
>> Make it a static variable.

> I had thought some kind of fcinfo->flinfo->fn_extra trick but... a
> static variable is fair enough too.

No, a fn_extra pointer would go away whenever the calling query ends,
and you'd have leaked the context permanently.  Children of
TopMemoryContext will never go away unless explicitly destroyed, so
a static variable has the right lifespan to remember them.

If you did want something that goes away at end of query, you could
probably make it a child of the PortalContext.
        regards, tom lane