Must a C state transition function use palloc on the returned value?

Started by Dirk Lutzebaeckabout 25 years ago3 messages
#1Dirk Lutzebaeck
lutzeb@aeccom.com

Hi,

I'm defining a new aggregate using a C transition function. It is of
type TEXT, so the C function gets pointers (*text) to the internal-state1 and
next-data-item parameters.

Question is if the returning value of type *text must be palloc'ed or
can be just taken from the input parameters. In the latter case I get
error messages like

NOTICE: PortalHeapMemoryFree: 0x0x40b22ce8 not in alloc set!

Dirk

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Dirk Lutzebaeck (#1)
Re: Must a C state transition function use palloc on the returned value?

Dirk Lutzebaeck <lutzeb@aeccom.com> writes:

I'm defining a new aggregate using a C transition function. It is of
type TEXT, so the C function gets pointers (*text) to the internal-state1 and
next-data-item parameters.

Question is if the returning value of type *text must be palloc'ed or
can be just taken from the input parameters.

The result must be a fresh palloc, since both inputs will be pfreed the
moment you return. 7.1 will copy the result for you if you are so
incautious as to try to return an input, but 7.0.* just falls over :-(

regards, tom lane

#3Dirk Lutzebaeck
lutzeb@aeccom.com
In reply to: Tom Lane (#2)
Re: Must a C state transition function use palloc on the returned value?

Tom Lane writes:

Dirk Lutzebaeck <lutzeb@aeccom.com> writes:

I'm defining a new aggregate using a C transition function. It is of
type TEXT, so the C function gets pointers (*text) to the internal-state1 and
next-data-item parameters.

Question is if the returning value of type *text must be palloc'ed or
can be just taken from the input parameters.

The result must be a fresh palloc, since both inputs will be pfreed the
moment you return. 7.1 will copy the result for you if you are so
incautious as to try to return an input, but 7.0.* just falls over :-(

Thanks! It works now...

Dirk