aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>2011-03-31 12:37:11 +0300
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>2011-03-31 12:37:11 +0300
commitec7626504f0fc8cca46d0f2a460e4b76177f79b3 (patch)
tree60d6a62b5c27afe601265e9d4bf77015c6a2b2fa /src
parent647f8b3dbaa68662f54aa762e9467874282c563d (diff)
downloadpostgresql-ec7626504f0fc8cca46d0f2a460e4b76177f79b3.tar.gz
postgresql-ec7626504f0fc8cca46d0f2a460e4b76177f79b3.zip
Don't leak the temporary PLyProcedure struct we create for inline plpython
blocks. Investigation by Jan UrbaƄski, though I didn't use his patch.
Diffstat (limited to 'src')
-rw-r--r--src/pl/plpython/plpython.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/src/pl/plpython/plpython.c b/src/pl/plpython/plpython.c
index dd2b9190fca..f3f58901fb1 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;