Skip to content

[BUG]: 2 successive py::scoped_interpreter -> double free or corruption (out) #5412

Open
@user706

Description

@user706

Required prerequisites

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
    (~> branch main)
  • Does not fail, when having only single py::scoped_interpreter
    (~> branch works_when_having_only_single_scoped_interpreter -> see diff): why?
  • Does not fail, when changing to py::list
    (~> branch works_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

Metadata

Metadata

Assignees

No one assigned

    Labels

    triageNew bug, unverified

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions