From: | Noah Misch <noah(at)leadboat(dot)com> |
---|---|
To: | Denys Rtveliashvili <rtvd(at)icloud(dot)com>, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
Cc: | Pg Hackers <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: Stateful C-language function with state managed by third-party library |
Date: | 2015-03-12 00:46:23 |
Message-ID: | 20150312004623.GA324995@tornado.leadboat.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On Tue, Mar 10, 2015 at 11:54:23AM -0400, Tom Lane wrote:
> Denys Rtveliashvili <rtvd(at)icloud(dot)com> writes:
> > My function neeeds to call a third-party library which would create a state and then that state should be kept for the duration of the current query. The library can deallocate that state in a correct way.
>
> > I understand that fn_extra is normally used for this and usually the state is created in a memory context which is deallocated at the end of the query. So normally it is not an issue. However, I cannot make that library use PostgreSQL utilities for memory management.
>
> > I am afraid that for long-running sessions it may cause serious memory leaks if they do not deallocate state correctly and in a timely manner.
>
> > Is there a mechanism for adding a finalizer hook which would be called and passed that pointer after the query is complete? Or perhaps there is another mechanism? I looked in the documentation and in the source but I do not see it mentioned.
>
> In HEAD, you could use a memory context reset callback for this purpose.
>
> I don't believe there's any fully satisfactory solution in the released
> branches; the closest you could get is an ExprContext callback, which
> has the fatal-for-this-purpose defect that it's only called on successful
> query completion, not if an error occurs.
RegisterSubXactCallback() is an established tool for addressing this scenario
in released branches. See how plpgsql and postgres_fdw use these xact
callbacks to explicitly release special resources.
From | Date | Subject | |
---|---|---|---|
Next Message | Peter Eisentraut | 2015-03-12 00:55:18 | Re: Turning off HOT/Cleanup sometimes |
Previous Message | Peter Eisentraut | 2015-03-12 00:38:59 | Re: Turning off HOT/Cleanup sometimes |