Re: Memory management with C aggregate

From: Ian Burrell <imb(at)rentrak(dot)com>
To: pgsql-hackers(at)postgresql(dot)org
Subject: Re: Memory management with C aggregate
Date: 2004-07-12 18:03:02
Message-ID: 40F2D256.7000703@rentrak.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Tom Lane wrote:
> Ian Burrell <imb(at)rentrak(dot)com> writes:
>
>>We have user-defined aggregates written in C running inside the server.
>> We are running into some memory management issues and wondering what
>>is the best way to solve the problem.
>
>
>>The state of the aggregates is a structure with a pointer to allocated
>>memory. The structure and memory are allocated in the
>>PortalMemoryContext and freed in the ffunc. We just discovered that the
>>ffunc function can be called multiple times with the same state on
>>certain queries. The double free causes a crash.
>
>
> AFAICS the ffunc should be called only once per aggregated group.
> Perhaps your code is confused about the handling of groups? If so,
> the double free is hardly your only worry --- you'll be computing wrong
> answers anyway till you fix that.
>

The aggregate is in a subquery which might make a difference. The ffunc
is only called multiple times when a nested loop is used in the query
plan. With other query plans, the ffunc is only called once. The ffunc
seems to be called once for every combination.

I can't get the following query to use a nested loop, but our query is
similar, but with a compound key and a custom aggregate. If x has N
rows, y has M, with N groups, then the ffunc can be called N*M times, M
times for each N group.

SELECT x.key_no, s.agg
FROM x
INNER JOIN (
SELECT y.key_no, custom_agg(num) AS agg
FROM y
GROUP BY key_no
) s
USING (key_no)
ORDER BY key_no

I'll try to come up with a test case that illustrates the problem.

- Ian

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Alvaro Herrera 2004-07-12 18:32:49 [subxacts] Open nested xact items
Previous Message Bruce Momjian 2004-07-12 17:49:41 Beta date