Fix zero-refcount bug for callbacks with a `StatusOr<PyObject *>` return.
Note: This change is the result of exploring and discarding multiple approaches to fixing the zero-refcount bug in a more general way. The only approach that worked out is this local fix in the callback code. Fundamentally, code involving `StatusOr<PyObject *>` objects is inherently unsafe and bug prone, because ownership of the Python reference is not managed automatically. Ideally use of `StatusOr<PyObject *>` would generate compilation errors (e.g. via `static_assert`), which would be easy to achieve just in the pybind11_abseil repo, but would require significant sprawling changes around the Google codebase. Unfortunately, currently this is infeasible. The command used for manual leak checking (see `# Manual verification` comments in status_testing_no_cpp_eh_test_lib.py) was: ``` blaze run //third_party/pybind11_abseil/tests:status_testing_no_cpp_eh_test ``` The `top` command was used to visually monitor `RES` for about 10 seconds, for each test case. PiperOrigin-RevId: 597061300
Showing
Please
register
or
sign in
to comment