On 30.03.2011 21:21, Jan Urbański wrote:
Valgrind showed me the way. PFA a trivial patch to avoid leaking a PLyProcedure struct in inline blocks.
Hmm, any reason the PLyProcedure struct needs to be allocated in TopMemoryContext in the first place? Could you palloc0 it in a shorter-lived context, or even better, just allocate it in stack?
PS. I don't think the volatile qualifier in 'proc' is in necessary. The variable is not changed in PG_TRY-block.
-- Heikki Linnakangas EnterpriseDB http://www.enterprisedb.com
diff --git a/src/pl/plpython/plpython.c b/src/pl/plpython/plpython.c index dd2b919..f3f5890 100644 --- a/src/pl/plpython/plpython.c +++ b/src/pl/plpython/plpython.c @@ -592,7 +592,7 @@ plpython_inline_handler(PG_FUNCTION_ARGS) FunctionCallInfoData fake_fcinfo; FmgrInfo flinfo; PLyProcedure *save_curr_proc; - PLyProcedure *volatile proc = NULL; + PLyProcedure proc; ErrorContextCallback plerrcontext; if (SPI_connect() != SPI_OK_CONNECT) @@ -613,26 +613,26 @@ plpython_inline_handler(PG_FUNCTION_ARGS) flinfo.fn_oid = InvalidOid; flinfo.fn_mcxt = CurrentMemoryContext; - proc = PLy_malloc0(sizeof(PLyProcedure)); - proc->pyname = PLy_strdup("__plpython_inline_block"); - proc->result.out.d.typoid = VOIDOID; + MemSet(&proc, 0, sizeof(PLyProcedure)); + proc.pyname = PLy_strdup("__plpython_inline_block"); + proc.result.out.d.typoid = VOIDOID; PG_TRY(); { - PLy_procedure_compile(proc, codeblock->source_text); - PLy_curr_procedure = proc; - PLy_function_handler(&fake_fcinfo, proc); + PLy_procedure_compile(&proc, codeblock->source_text); + PLy_curr_procedure = &proc; + PLy_function_handler(&fake_fcinfo, &proc); } PG_CATCH(); { - PLy_procedure_delete(proc); + PLy_procedure_delete(&proc); PLy_curr_procedure = save_curr_proc; PyErr_Clear(); PG_RE_THROW(); } PG_END_TRY(); - PLy_procedure_delete(proc); + PLy_procedure_delete(&proc); /* Pop the error context stack */ error_context_stack = plerrcontext.previous;
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers