Re: Thinking about inventing MemoryContextSetParent - Mailing list pgsql-hackers

From Tom Lane
Subject Re: Thinking about inventing MemoryContextSetParent
Date
Msg-id 17244.1315867693@sss.pgh.pa.us
Whole thread Raw
In response to Re: Thinking about inventing MemoryContextSetParent  (Alvaro Herrera <alvherre@commandprompt.com>)
List pgsql-hackers
Alvaro Herrera <alvherre@commandprompt.com> writes:
> Excerpts from Tom Lane's message of sáb sep 10 19:03:23 -0300 2011:
>> I'm considering inventing a new mcxt.c primitive,
>> 
>> void MemoryContextSetParent(MemoryContext context, MemoryContext new_parent);
>> 
>> which would have the effect of delinking "context" from its current
>> parent context and attaching it as a child of the new specified parent.
>> (Any child contexts that it has would naturally follow along.)
>> Because of the way that mcxt.c handles parent/child links, there is no
>> palloc required and so the operation cannot fail.

> Interesting.  I wonder whether we could use this somehow to fix
> performance problems in certain subtransaction code paths that "reassign
> stuff to the parent"; instead of moving pointers or memory around,
> perhaps we could do something like this.  Not that I have actually
> looked into it.

Yeah, I think it would be worth looking for places where we are either
copying lots-o-stuff or else jumping through weird hoops to avoid doing
that.  I'm about halfway through rewriting the plancache and SPIPlan
stuff using this mechanism, and it seems to be coming out a whole lot
nicer --- it'll probably end up with less parse-tree-copying overall,
and much less risk of leaking memory when you hit an error partway
through constructing a cached plan.  (The existing SPI code gets a
completely failing grade on that aspect :-(.)
        regards, tom lane


pgsql-hackers by date:

Previous
From: Dermot
Date:
Subject: Sponsored development
Next
From: Tom Lane
Date:
Subject: Re: [WIP] Caching constant stable expressions per execution