Search Postgresql Archives

Re: Freeing memory in native extension in case of error

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Great, thanks

On 15 June 2017 at 22:07, Tom Lane <tgl@xxxxxxxxxxxxx> wrote:
> Gabriel Furstenheim Milerud <furstenheim@xxxxxxxxx> writes:
>> I've written an extension in C to sum jsonb. For that I use the
>> jsonbiterator defined in
>> https://github.com/postgres/postgres/blob/master/src/backend/utils/adt/jsonb_util.c#L743
>
>> In the comments of JsonbIteratorNext it states: 'Callers in such a
>> scenario, that are particularly sensitive to leaking memory in a
>> long-lived context may walk the ancestral tree from the final iterator
>> we left them with to its oldest ancestor, pfree()ing as they go'
>
>> In the extension that I've written, I sometimes stop in the middle of
>> an iteration, but only to raise an error (if the json contains a not
>> numeric value), with 'ereport(ERROR, ...'
>
>> Do I have to free the memory in that case?
>
> I wouldn't bother, assuming that it's all in the short-lived query
> context (the one that's current when your function is called).
> Error cleanup will flush that context automatically.
>
> Really, for memory in that context, it's unlikely to matter even
> if you are sloppy and leak memory on normal non-error return.
> That context will get reset after each row processed by the
> query anyway.  It's only if you're trying to cache data across
> rows, or in even longer-lived ways, that you really need to be
> careful.
>
>                         regards, tom lane


-- 
Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]

  Powered by Linux