Provide PYBIND11_NO_ASSERT_GIL_HELD_INCREF_DECREF as an option (#4753)

* Remove GIL checks

* Update common.h

* Add flag

* style: pre-commit fixes

* Update pytypes.h

* style: pre-commit fixes

* Update common.h

* style: pre-commit fixes

* Update pytypes.h

* style: pre-commit fixes

* Update common.h

* style: pre-commit fixes

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
This commit is contained in:
Ethan Steinberg 2023-07-17 00:05:52 -07:00 committed by GitHub
parent ec1b57c50c
commit 99131a85b6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 8 additions and 3 deletions

View File

@ -324,8 +324,8 @@ PYBIND11_WARNING_POP
#endif #endif
// See description of PR #4246: // See description of PR #4246:
#if !defined(NDEBUG) && !defined(PY_ASSERT_GIL_HELD_INCREF_DECREF) && !defined(PYPY_VERSION) \ #if !defined(PYBIND11_NO_ASSERT_GIL_HELD_INCREF_DECREF) && !defined(NDEBUG) \
&& !defined(PYBIND11_ASSERT_GIL_HELD_INCREF_DECREF) && !defined(PYPY_VERSION) && !defined(PYBIND11_ASSERT_GIL_HELD_INCREF_DECREF)
# define PYBIND11_ASSERT_GIL_HELD_INCREF_DECREF # define PYBIND11_ASSERT_GIL_HELD_INCREF_DECREF
#endif #endif

View File

@ -303,7 +303,12 @@ private:
stderr, stderr,
"%s is being called while the GIL is either not held or invalid. Please see " "%s is being called while the GIL is either not held or invalid. Please see "
"https://pybind11.readthedocs.io/en/stable/advanced/" "https://pybind11.readthedocs.io/en/stable/advanced/"
"misc.html#common-sources-of-global-interpreter-lock-errors for debugging advice.\n", "misc.html#common-sources-of-global-interpreter-lock-errors for debugging advice.\n"
"If you are convinced there is no bug in your code, you can #define "
"PYBIND11_NO_ASSERT_GIL_HELD_INCREF_DECREF"
"to disable this check. In that case you have to ensure this #define is consistently "
"used for all translation units linked into a given pybind11 extension, otherwise "
"there will be ODR violations.",
function_name.c_str()); function_name.c_str());
fflush(stderr); fflush(stderr);
if (Py_TYPE(m_ptr)->tp_name != nullptr) { if (Py_TYPE(m_ptr)->tp_name != nullptr) {