Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Eisentraut2011-01-18 21:22:37 +0000
committerPeter Eisentraut2011-01-18 21:22:37 +0000
commit88047e59ba12479ef9adcaf3dee61b48566ce6eb (patch)
tree81de5b15c8804528371c29d8f696c450283eb22d /src/pl/plpython/plpython.c
parent8995440e387846261d18e728f11adc528ccc5c1b (diff)
Fix an error when a set-returning function fails halfway through the execution
If the function using yield to return rows fails halfway, the iterator stays open and subsequent calls to the function will resume reading from it. The fix is to unref the iterator and set it to NULL if there has been an error. Jan UrbaƄski
Diffstat (limited to 'src/pl/plpython/plpython.c')
-rw-r--r--src/pl/plpython/plpython.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/pl/plpython/plpython.c b/src/pl/plpython/plpython.c
index c25db9344f6..6f31501c7a8 100644
--- a/src/pl/plpython/plpython.c
+++ b/src/pl/plpython/plpython.c
@@ -1164,6 +1164,14 @@ PLy_function_handler(FunctionCallInfo fcinfo, PLyProcedure *proc)
Py_XDECREF(plargs);
Py_XDECREF(plrv);
+ /*
+ * If there was an error the iterator might have not been exhausted
+ * yet. Set it to NULL so the next invocation of the function will
+ * start the iteration again.
+ */
+ Py_XDECREF(proc->setof);
+ proc->setof = NULL;
+
PG_RE_THROW();
}
PG_END_TRY();