aboutsummaryrefslogtreecommitdiff
path: root/src/backend/access/gist/gistxlog.c
diff options
context:
space:
mode:
authorNeil Conway <neilc@samurai.com>2006-01-28 03:28:19 +0000
committerNeil Conway <neilc@samurai.com>2006-01-28 03:28:19 +0000
commit81dbda0792014470ff66f97ca6a81c03f35d212e (patch)
treed29cbe28e07391fd29355f61f03fc6fb8da06e71 /src/backend/access/gist/gistxlog.c
parent108a2e51c97549f3f05563ef229a44078d2ecaaf (diff)
downloadpostgresql-81dbda0792014470ff66f97ca6a81c03f35d212e.tar.gz
postgresql-81dbda0792014470ff66f97ca6a81c03f35d212e.zip
Per a bug report from Theo Schlossnagle, plperl_return_next() leaks
memory in the executor's per-query memory context. It also inefficient: it invokes get_call_result_type() and TupleDescGetAttInMetadata() for every call to return_next, rather than invoking them once (per PL/Perl function call) and memoizing the result. This patch makes the following changes: - refactor the code to include all the "per PL/Perl function call" data inside a single struct, "current_call_data". This means we don't need to save and restore N pointers for every recursive call into PL/Perl, we can just save and restore one. - lookup the return type metadata needed by plperl_return_next() once, and then stash it in "current_call_data", so as to avoid doing the lookup for every call to return_next. - create a temporary memory context in which to evaluate the return type's input functions. This memory context is reset for each call to return_next. The patch appears to fix the memory leak, and substantially reduces the overhead imposed by return_next.
Diffstat (limited to 'src/backend/access/gist/gistxlog.c')
0 files changed, 0 insertions, 0 deletions