Fix subinterpreter exception handling SEGFAULT (#5795)
* check for current exception, not uncaught_exceptions
* remove all in-flight exception handling from ~subinterpreter_scoped_activate
diff --git a/include/pybind11/subinterpreter.h b/include/pybind11/subinterpreter.h
index 1bdcc26..4b208ed 100644
--- a/include/pybind11/subinterpreter.h
+++ b/include/pybind11/subinterpreter.h
@@ -280,28 +280,6 @@
// We were on this interpreter already, so just make sure the GIL goes back as it was
PyGILState_Release(gil_state_);
} else {
-#if defined(PYBIND11_DETAILED_ERROR_MESSAGES)
- bool has_active_exception;
-# if defined(__cpp_lib_uncaught_exceptions)
- has_active_exception = std::uncaught_exceptions() > 0;
-# else
- // removed in C++20, replaced with uncaught_exceptions
- has_active_exception = std::uncaught_exception();
-# endif
- if (has_active_exception) {
- try {
- std::rethrow_exception(std::current_exception());
- } catch (error_already_set &) {
- // Because error_already_set holds python objects and what() acquires the GIL, it
- // is basically never OK to let these exceptions propagate outside the current
- // active interpreter.
- pybind11_fail("~subinterpreter_scoped_activate: cannot propagate Python "
- "exceptions outside of their owning interpreter");
- } catch (...) {
- }
- }
-#endif
-
if (tstate_) {
#if defined(PYBIND11_DETAILED_ERROR_MESSAGES)
if (detail::get_thread_state_unchecked() != tstate_) {