mirror of
https://github.com/pybind/pybind11.git
synced 2024-11-27 23:52:00 +00:00
* Clear local internals after finalizing interpreter * Add descriptive comments * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
This commit is contained in:
parent
93d68dd994
commit
42455b5e1d
@ -247,6 +247,10 @@ inline void finalize_interpreter() {
|
|||||||
if (builtins.contains(id) && isinstance<capsule>(builtins[id])) {
|
if (builtins.contains(id) && isinstance<capsule>(builtins[id])) {
|
||||||
internals_ptr_ptr = capsule(builtins[id]);
|
internals_ptr_ptr = capsule(builtins[id]);
|
||||||
}
|
}
|
||||||
|
// Local internals contains data managed by the current interpreter, so we must clear them to
|
||||||
|
// avoid undefined behaviors when initializing another interpreter
|
||||||
|
detail::get_local_internals().registered_types_cpp.clear();
|
||||||
|
detail::get_local_internals().registered_exception_translators.clear();
|
||||||
|
|
||||||
Py_Finalize();
|
Py_Finalize();
|
||||||
|
|
||||||
|
@ -380,3 +380,21 @@ TEST_CASE("sys.argv gets initialized properly") {
|
|||||||
}
|
}
|
||||||
py::initialize_interpreter();
|
py::initialize_interpreter();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_CASE("make_iterator can be called before then after finalizing an interpreter") {
|
||||||
|
// Reproduction of issue #2101 (https://github.com/pybind/pybind11/issues/2101)
|
||||||
|
py::finalize_interpreter();
|
||||||
|
|
||||||
|
std::vector<int> container;
|
||||||
|
{
|
||||||
|
pybind11::scoped_interpreter g;
|
||||||
|
auto iter = pybind11::make_iterator(container.begin(), container.end());
|
||||||
|
}
|
||||||
|
|
||||||
|
REQUIRE_NOTHROW([&]() {
|
||||||
|
pybind11::scoped_interpreter g;
|
||||||
|
auto iter = pybind11::make_iterator(container.begin(), container.end());
|
||||||
|
}());
|
||||||
|
|
||||||
|
py::initialize_interpreter();
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user