From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | pgsql-committers(at)postgresql(dot)org |
Subject: | pgsql: Fix memory leaks in record_out() and record_send(). |
Date: | 2012-11-13 19:46:20 |
Message-ID: | E1TYMRA-0007Vw-8D@gemulon.postgresql.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-committers |
Fix memory leaks in record_out() and record_send().
record_out() leaks memory: it fails to free the strings returned by the
per-column output functions, and also is careless about detoasted values.
This results in a query-lifespan memory leakage when returning composite
values to the client, because printtup() runs the output functions in the
query-lifespan memory context. Fix it to handle these issues the same way
printtup() does. Also fix a similar leakage in record_send().
(At some point we might want to try to run output functions in
shorter-lived memory contexts, so that we don't need a zero-leakage policy
for them. But that would be a significantly more invasive patch, which
doesn't seem like material for back-patching.)
In passing, use appendStringInfoCharMacro instead of appendStringInfoChar
in the innermost data-copying loop of record_out, to try to shave a few
cycles from this function's runtime.
Per trouble report from Carlos Henrique Reimer. Back-patch to all
supported versions.
Branch
------
REL9_0_STABLE
Details
-------
http://git.postgresql.org/pg/commitdiff/797ea5219ca1ddb54c9f9a5e908a1b2935a628f6
Modified Files
--------------
src/backend/utils/adt/rowtypes.c | 52 +++++++++++++++++++++++++++++--------
1 files changed, 40 insertions(+), 12 deletions(-)
From | Date | Subject | |
---|---|---|---|
Next Message | Bruce Momjian | 2012-11-14 02:08:16 | pgsql: Adjust find_status for newer Linux 'nm' output format. |
Previous Message | Simon Riggs | 2012-11-13 19:14:45 | pgsql: Skip searching for subxact locks at commit. |