memory_leak.patch
application/octet-stream
Filename: memory_leak.patch
Type: application/octet-stream
Part: 1
Patch
Format: unified
| File | + | − |
|---|---|---|
| src/pl/plpython/plpy_spi.c | 5 | 0 |
diff --git a/src/pl/plpython/plpy_spi.c b/src/pl/plpython/plpy_spi.c
index ff87b27de0..2fa6688f2e 100644
--- a/src/pl/plpython/plpy_spi.c
+++ b/src/pl/plpython/plpy_spi.c
@@ -222,6 +222,8 @@ PLy_spi_execute_plan(PyObject *ob, PyObject *list, long limit)
PG_TRY();
{
PLyExecutionContext *exec_ctx = PLy_current_execution_context();
+ MemoryContext scratch_context = PLy_get_scratch_context(exec_ctx);
+ MemoryContext oldcontext;
char *volatile nulls;
volatile int j;
@@ -230,6 +232,8 @@ PLy_spi_execute_plan(PyObject *ob, PyObject *list, long limit)
else
nulls = NULL;
+ MemoryContextReset(scratch_context);
+ oldcontext = MemoryContextSwitchTo(scratch_context);
for (j = 0; j < nargs; j++)
{
PLyObToDatum *arg = &plan->args[j];
@@ -249,6 +253,7 @@ PLy_spi_execute_plan(PyObject *ob, PyObject *list, long limit)
}
PG_END_TRY(2);
}
+ MemoryContextSwitchTo(oldcontext);
rv = SPI_execute_plan(plan->plan, plan->values, nulls,
exec_ctx->curr_proc->fn_readonly, limit);