Re: Stateful C-language function with state managed by third-party library

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Denys Rtveliashvili <rtvd(at)icloud(dot)com>
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-10 15:54:23
Message-ID: 16590.1426002863@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

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.

regards, tom lane

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Pavel Stehule 2015-03-10 16:01:35 Re: proposal: disallow operator "=>" and use it for named parameters
Previous Message Jim Nasby 2015-03-10 15:53:49 Re: proposal: searching in array function - array_position