pybind11/tests
Laramie Leavitt 0e599589fe
Fix thread safety for pybind11 loader_life_support (#3237)
* Fix thread safety for pybind11 loader_life_support

Fixes issue: https://github.com/pybind/pybind11/issues/2765

This converts the vector of PyObjects to either a single void* or
a per-thread void* depending on the WITH_THREAD define.

The new field is used by each thread to construct a stack
of loader_life_support frames that can extend the life of python
objects.

The pointer is updated when the loader_life_support object is allocated
(which happens before a call) as well as on release.

Each loader_life_support maintains a set of PyObject references
that need to be lifetime extended; this is done by storing them
in a c++ std::unordered_set and clearing the references when the
method completes.

* Also update the internals version as the internal struct is no longer compatible

* Add test demonstrating threading works correctly.

It may be appropriate to run this under msan/tsan/etc.

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Update test to use lifetime-extended references rather than
std::string_view, as that's a C++ 17 feature.

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Make loader_life_support members private

* Update version to dev2

* Update test to use python threading rather than concurrent.futures

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Remove unnecessary env in test

* Remove unnecessary pytest in test

* Use native C++ thread_local in place of python per-thread data structures to retain compatability

* clang-format test_thread.cpp

* Add a note about debugging the py::cast() error

* thread_test.py now propagates exceptions on join() calls.

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* remove unused sys / merge

* Update include order in test_thread.cpp

* Remove spurious whitespace

* Update comment / whitespace.

* Address review comments

* lint cleanup

* Fix test IntStruct constructor.

* Add explicit to constructor

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Aaron Gokaslan <skylion.aaron@gmail.com>
2021-09-10 12:29:21 -04:00
..
extra_python_package fix: the CMake config in Python package had a hard coded path (#3144) 2021-07-27 17:23:52 -04:00
extra_setuptools maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_cmake_build fix: Set __file__ constant when using eval_file (#1300) (#3233) 2021-09-09 14:06:33 -04:00
test_embed CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
CMakeLists.txt Fix thread safety for pybind11 loader_life_support (#3237) 2021-09-10 12:29:21 -04:00
conftest.py style: use Black everywhere (#2594) 2020-10-16 16:38:13 -04:00
constructor_stats.h refactor: module -> module_ with typedef (#2544) 2020-10-03 13:38:03 -04:00
cross_module_gil_utils.cpp Make sure detail::get_internals acquires the GIL before making Python calls. (#1836) 2019-07-15 16:47:02 +02:00
env.py env: Add surrogate for pytest.deprecated_call for ptyest<3.9 (#2923) 2021-04-02 14:34:09 -04:00
local_bindings.h CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
object.h CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
pybind11_cross_module_tests.cpp CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
pybind11_tests.cpp refactor: module -> module_ with typedef (#2544) 2020-10-03 13:38:03 -04:00
pybind11_tests.h CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
pytest.ini Make sure all warnings in pytest get turned into errors (#2838) 2021-02-01 14:52:20 +01:00
requirements.txt tests: fix pytest usage on Python 3.10 (#3221) 2021-08-26 10:52:13 -07:00
test_async.cpp refactor: module -> module_ with typedef (#2544) 2020-10-03 13:38:03 -04:00
test_async.py tests: cleanup and ci hardening (#2397) 2020-08-16 16:02:12 -04:00
test_buffers.cpp CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
test_buffers.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_builtin_casters.cpp CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
test_builtin_casters.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_call_policies.cpp functions: Add doc on incorrect argument index (#2979) 2021-05-06 10:13:30 -04:00
test_call_policies.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_callbacks.cpp fix: memory leak in cpp_function (#3228) (#3229) 2021-08-30 21:48:33 -04:00
test_callbacks.py fix: memory leak in cpp_function (#3228) (#3229) 2021-08-30 21:48:33 -04:00
test_chrono.cpp fix: allow assignment of time points of resolutions other than that of a system clock (#2481) 2020-09-13 10:24:00 -04:00
test_chrono.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_class.cpp CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
test_class.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_constants_and_functions.cpp Removing __INTEL_COMPILER section from pragma block at the top of pybind11.h (#3135) 2021-07-27 15:33:31 -07:00
test_constants_and_functions.py Plug leaking function_records in cpp_function initialization in case of exceptions (found by Valgrind in #2746) (#2756) 2021-01-14 19:34:32 +01:00
test_copy_move.cpp CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
test_copy_move.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_custom_type_casters.cpp fix(clang-tidy): performance fixes applied in tests and CI (#3051) 2021-06-22 12:11:54 -04:00
test_custom_type_casters.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_docstring_options.cpp fix: do not set docstring for function when empty (#2745) 2020-12-27 22:56:30 -05:00
test_docstring_options.py fix: do not set docstring for function when empty (#2745) 2020-12-27 22:56:30 -05:00
test_eigen.cpp maint(Clang-Tidy): readability-const-return (#3254) 2021-09-09 21:27:36 -07:00
test_eigen.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_enum.cpp Fix enum value's __int__ returning non-int when underlying type is bool or of char type (#1334) 2021-08-26 14:34:24 -07:00
test_enum.py Minor follow-on to PR #1334 (Fix enum value's __int__ returning non-int when underlying type is bool or of char type) (#3232) 2021-08-31 08:52:04 -07:00
test_eval_call.py style: use Black everywhere (#2594) 2020-10-16 16:38:13 -04:00
test_eval.cpp test_eval: Show example of working closure (#2743) 2021-08-06 15:51:53 -04:00
test_eval.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_exceptions.cpp CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
test_exceptions.h fix: Mingw64 corrected and add a CI job to test it (#3132) 2021-07-30 13:48:41 -04:00
test_exceptions.py Clone of @virtuald's PR #2112 with minor enhancements. (#3215) 2021-08-23 17:30:01 -07:00
test_factory_constructors.cpp CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
test_factory_constructors.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_gil_scoped.cpp fix(clang-tidy): performance fixes applied in tests and CI (#3051) 2021-06-22 12:11:54 -04:00
test_gil_scoped.py style: use Black everywhere (#2594) 2020-10-16 16:38:13 -04:00
test_iostream.cpp Adding iostream.h thread-safety documentation. (#2995) 2021-07-12 13:39:06 -07:00
test_iostream.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_kwargs_and_defaults.cpp NOLINT reduction (#3096) 2021-07-12 13:10:28 -07:00
test_kwargs_and_defaults.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_local_bindings.cpp CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
test_local_bindings.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_methods_and_attributes.cpp CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
test_methods_and_attributes.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_modules.cpp CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
test_modules.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_multiple_inheritance.cpp CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
test_multiple_inheritance.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_numpy_array.cpp view for numpy arrays (#987) 2021-08-26 14:11:01 -07:00
test_numpy_array.py view for numpy arrays (#987) 2021-08-26 14:11:01 -07:00
test_numpy_dtypes.cpp maint(clang-tidy): Bugprone enable checks (#3166) 2021-08-06 14:30:28 -04:00
test_numpy_dtypes.py ci: extend msys2 mingw CI (#3207) 2021-08-19 14:42:55 -04:00
test_numpy_vectorize.cpp CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
test_numpy_vectorize.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_opaque_types.cpp fix(clang-tidy): performance fixes applied in tests and CI (#3051) 2021-06-22 12:11:54 -04:00
test_opaque_types.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_operator_overloading.cpp fix(clang-tidy): performance fixes applied in tests and CI (#3051) 2021-06-22 12:11:54 -04:00
test_operator_overloading.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_pickling.cpp CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
test_pickling.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_pytypes.cpp Adding ssize_t_cast to support passing size_t or ssize_t values where ssize_t is needed. (#3219) 2021-08-28 16:40:46 -07:00
test_pytypes.py Adding ssize_t_cast to support passing size_t or ssize_t values where ssize_t is needed. (#3219) 2021-08-28 16:40:46 -07:00
test_sequences_and_iterators.cpp CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
test_sequences_and_iterators.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_smart_ptr.cpp CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
test_smart_ptr.py Fix various minor memory leaks in the tests (found by Valgrind in #2746) (#2758) 2021-01-01 17:05:22 +01:00
test_stl_binders.cpp CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
test_stl_binders.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_stl.cpp CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
test_stl.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_tagbased_polymorphic.cpp CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
test_tagbased_polymorphic.py style: use Black everywhere (#2594) 2020-10-16 16:38:13 -04:00
test_thread.cpp Fix thread safety for pybind11 loader_life_support (#3237) 2021-09-10 12:29:21 -04:00
test_thread.py Fix thread safety for pybind11 loader_life_support (#3237) 2021-09-10 12:29:21 -04:00
test_union.cpp Fix assertion failure for unions (#1685) (#1709) 2019-06-11 23:28:58 +02:00
test_union.py ci: GHA basic format & pre-commit (#2309) 2020-07-20 13:35:21 -04:00
test_virtual_functions.cpp CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
test_virtual_functions.py Add a Valgrind build on debug Python 3.9 (#2746) 2021-01-15 21:07:31 +01:00
valgrind-numpy-scipy.supp docs: fix various typos (#3075) 2021-07-04 19:58:35 -04:00
valgrind-python.supp chore: get PyPy 3.7 wheels using NumPy 1.20 (#2837) 2021-01-31 17:29:09 -05:00