Open
Description
Required prerequisites
- Make sure you've read the documentation. Your issue may be addressed there.
- Search the issue tracker and Discussions to verify that this hasn't already been reported. +1 or comment there if it has.
- Consider asking first in the Gitter chat room or in a Discussion.
What version (or hash if on master) of pybind11 are you using?
v2.13
Problem description
I get: double free or corruption (out)
Happens when having 2 successive non-overlapping py::scoped_interpreter
(and doing module imports):
{
py::scoped_interpreter inter;
py::object imported = py::module::import("mysum"); // mysum.py imports e.g. numpy
}
{
py::scoped_interpreter inter; // again
py::object imported = py::module::import("mysum"); // crash ! double free or corruption (out)
}
Reproducible example code
Reproducible example: https://github.com/user706/pybind11_test
- Fails only with numpy and
py::array_t
and "single"py::scoped_interpreter
(~> branchmain
) - Does not fail, when having only single
py::scoped_interpreter
(~> branchworks_when_having_only_single_scoped_interpreter
-> see diff): why? - Does not fail, when changing to
py::list
(~> branchworks_when_removing_numpy
-> see diff): why? (perhaps because of no import)
Do this:
git clone https://github.com/user706/pybind11_test
cd pybind11_test
mkdir build/
cd build/
cmake .. # will clone https://github.com/pybind/pybind11.git (stable)
cmake --build . -j # will also copy mysum.py into the build/ directory
./go # run (need a python with numpy)
result:
Sum is: 15
double free or corruption (out)
Aborted (core dumped)
It fails in this line, but only the 2nd time through the loop!!!
But if I simply change the following line
constexpr int NUM_LOOPS = 2;
to this
constexpr int NUM_LOOPS = 1;
then it will not fail.
Why does it fail with NUM_LOOPS = 2
?
How can one fix it?
Thanks
Is this a regression? Put the last known working version here if it is.
Not a regression