Author: Matti Picus <[email protected]>
Branch:
Changeset: r92121:9ddefd44f80d
Date: 2017-08-11 12:37 +0300
http://bitbucket.org/pypy/pypy/changeset/9ddefd44f80d/
Log: do not change preexisting error when calling c-api functions
unsuccessfully tried to write a test, since testing does not go
through this path
diff --git a/pypy/module/cpyext/api.py b/pypy/module/cpyext/api.py
--- a/pypy/module/cpyext/api.py
+++ b/pypy/module/cpyext/api.py
@@ -1575,6 +1575,7 @@
assert cpyext_glob_tid_ptr[0] == 0
cpyext_glob_tid_ptr[0] = tid
+ preexist_error = PyErr_Occurred(space) is not None
try:
# Call the function
result = call_external_function(func, *boxed_args)
@@ -1598,15 +1599,15 @@
# Check for exception consistency
has_error = PyErr_Occurred(space) is not None
has_result = ret is not None
- if has_error and has_result:
- raise oefmt(space.w_SystemError,
- "An exception was set, but function returned a "
- "value")
- elif not expect_null and not has_error and not has_result:
- raise oefmt(space.w_SystemError,
- "Function returned a NULL result without setting "
- "an exception")
-
+ if not preexist_error:
+ if has_error and has_result:
+ raise oefmt(space.w_SystemError,
+ "An exception was set, but function returned a
"
+ "value")
+ elif not expect_null and not has_error and not has_result:
+ raise oefmt(space.w_SystemError,
+ "Function returned a NULL result without
setting "
+ "an exception")
if has_error:
state = space.fromcache(State)
state.check_and_raise_exception()
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit