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 по дате отправления: