Storing MemoryContext Pointers

Started by Volkan YAZICIover 19 years ago4 messages
#1Volkan YAZICI
yazicivo@ttnet.net.tr

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.

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Volkan YAZICI (#1)
Re: Storing MemoryContext Pointers

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

#3Volkan YAZICI
yazicivo@ttnet.net.tr
In reply to: Tom Lane (#2)
Re: Storing MemoryContext Pointers

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.

#4Tom Lane
tgl@sss.pgh.pa.us
In reply to: Volkan YAZICI (#3)
Re: Storing MemoryContext Pointers

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