From: | Gabriel Furstenheim Milerud <furstenheim(at)gmail(dot)com> |
---|---|
To: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
Cc: | pgsql-general(at)postgresql(dot)org |
Subject: | Re: Freeing memory in native extension in case of error |
Date: | 2017-06-15 20:15:01 |
Message-ID: | CAJN3DWq=dxbYhLGCajTQU-UDPF0qp8NoBobE2DSm2PB9ur0oqA@mail.gmail.com |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
Great, thanks
On 15 June 2017 at 22:07, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:
> Gabriel Furstenheim Milerud <furstenheim(at)gmail(dot)com> 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
From | Date | Subject | |
---|---|---|---|
Next Message | Igor Korot | 2017-06-15 20:23:20 | Re: Connection options |
Previous Message | Adrian Klaver | 2017-06-15 20:13:40 | Re: Connection options |