Commit b2c1978c by Aaron Gokaslan Committed by GitHub

bugfix: Keep registered types until after Py_Finalize(). Fix #4459 (#4486)

* Keep registered types until after Py_Finalize(). Fix #4459

* Address reviewer comments
parent 9ef65cee
......@@ -254,13 +254,16 @@ inline void finalize_interpreter() {
if (builtins.contains(id) && isinstance<capsule>(builtins[id])) {
internals_ptr_ptr = capsule(builtins[id]);
}
Py_Finalize();
// Local internals contains data managed by the current interpreter, so we must clear them to
// avoid undefined behaviors when initializing another interpreter
// Must be cleared only after Py_Finalize() so atexit and other hooks can still use
// registered_types
detail::get_local_internals().registered_types_cpp.clear();
detail::get_local_internals().registered_exception_translators.clear();
Py_Finalize();
if (internals_ptr_ptr) {
delete *internals_ptr_ptr;
*internals_ptr_ptr = nullptr;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment