Re: DETOASTing in custom memory context

Поиск
Список
Период
Сортировка
От strk
Тема Re: DETOASTing in custom memory context
Дата
Msg-id 20031027212941.E51468@freek.keybit.net
обсуждение исходный текст
Ответ на Re: DETOASTing in custom memory context  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers
tgl wrote:
> strk <strk@keybit.net> writes:
> >> From whitin an aggregate sfunc I did:
> >         oldcontext = MemoryContextSwitchTo(fcinfo->flinfo->fn_mcxt);
> >         geom = (GEOMETRY *)PG_DETOAST_DATUM(datum);
> >         MemoryContextSwitchTo(oldcontext);
> 
> > And later in aggregate's finalfunc:
> >     pfree(geom);
> 
> > Result:
> >     segfault!
> 
> > What's wrong with it ?
> 
> Perhaps you wanted PG_DETOAST_DATUM_COPY().  Or possibly use
> PG_FREE_IF_COPY() rather than an unconditional pfree, though
> that would depend on just what your usage pattern is.

Sure, how did I miss that !
PG_FREE_IF_COPY is unapplicable here since pfree() call is in a
different function that the one DETOASTING it (finalfunc and sfunc
respectively of an aggregate), but PG_DETOAST_DATUM_COPY() did at
least force a copy and thus the context-switch...

thanks,
--strk;



В списке pgsql-hackers по дате отправления:

Предыдущее
От: "Eduardo D Piovesam"
Дата:
Сообщение: Re: PostgreSQL on Novell Netware 6.5.
Следующее
От: Jan Wieck
Дата:
Сообщение: Re: Vacuum thoughts