gh-111863: Rename `Py_NOGIL` to `Py_GIL_DISABLED` (#111864)

Rename Py_NOGIL to Py_GIL_DISABLED
This commit is contained in:
Hugo van Kemenade 2023-11-20 15:52:00 +02:00 committed by GitHub
parent 1c8f912ebd
commit 3b3ec0d77f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
39 changed files with 82 additions and 81 deletions

View File

@ -151,7 +151,7 @@ struct _ts {
/* Tagged pointer to top-most critical section, or zero if there is no /* Tagged pointer to top-most critical section, or zero if there is no
* active critical section. Critical sections are only used in * active critical section. Critical sections are only used in
* `--disable-gil` builds (i.e., when Py_NOGIL is defined to 1). In the * `--disable-gil` builds (i.e., when Py_GIL_DISABLED is defined to 1). In the
* default build, this field is always zero. * default build, this field is always zero.
*/ */
uintptr_t critical_section; uintptr_t critical_section;

View File

@ -86,7 +86,7 @@ extern "C" {
#define _Py_CRITICAL_SECTION_TWO_MUTEXES 0x2 #define _Py_CRITICAL_SECTION_TWO_MUTEXES 0x2
#define _Py_CRITICAL_SECTION_MASK 0x3 #define _Py_CRITICAL_SECTION_MASK 0x3
#ifdef Py_NOGIL #ifdef Py_GIL_DISABLED
# define Py_BEGIN_CRITICAL_SECTION(op) \ # define Py_BEGIN_CRITICAL_SECTION(op) \
{ \ { \
_PyCriticalSection _cs; \ _PyCriticalSection _cs; \
@ -104,13 +104,13 @@ extern "C" {
# define Py_END_CRITICAL_SECTION2() \ # define Py_END_CRITICAL_SECTION2() \
_PyCriticalSection2_End(&_cs2); \ _PyCriticalSection2_End(&_cs2); \
} }
#else /* !Py_NOGIL */ #else /* !Py_GIL_DISABLED */
// The critical section APIs are no-ops with the GIL. // The critical section APIs are no-ops with the GIL.
# define Py_BEGIN_CRITICAL_SECTION(op) # define Py_BEGIN_CRITICAL_SECTION(op)
# define Py_END_CRITICAL_SECTION() # define Py_END_CRITICAL_SECTION()
# define Py_BEGIN_CRITICAL_SECTION2(a, b) # define Py_BEGIN_CRITICAL_SECTION2(a, b)
# define Py_END_CRITICAL_SECTION2() # define Py_END_CRITICAL_SECTION2()
#endif /* !Py_NOGIL */ #endif /* !Py_GIL_DISABLED */
typedef struct { typedef struct {
// Tagged pointer to an outer active critical section (or 0). // Tagged pointer to an outer active critical section (or 0).

View File

@ -31,7 +31,7 @@ typedef FARPROC dl_funcptr;
# define PYD_DEBUG_SUFFIX "" # define PYD_DEBUG_SUFFIX ""
#endif #endif
#ifdef Py_NOGIL #ifdef Py_GIL_DISABLED
# define PYD_THREADING_TAG "t" # define PYD_THREADING_TAG "t"
#else #else
# define PYD_THREADING_TAG "" # define PYD_THREADING_TAG ""

View File

@ -33,11 +33,11 @@ extern "C" {
// ... // ...
// PyMutex_Unlock(&m); // PyMutex_Unlock(&m);
// NOTE: In Py_NOGIL builds, `struct _PyMutex` is defined in Include/object.h. // NOTE: In Py_GIL_DISABLED builds, `struct _PyMutex` is defined in Include/object.h.
// The Py_NOGIL builds need the definition in Include/object.h for the // The Py_GIL_DISABLED builds need the definition in Include/object.h for the
// `ob_mutex` field in PyObject. For the default (non-free-threaded) build, // `ob_mutex` field in PyObject. For the default (non-free-threaded) build,
// we define the struct here to avoid exposing it in the public API. // we define the struct here to avoid exposing it in the public API.
#ifndef Py_NOGIL #ifndef Py_GIL_DISABLED
struct _PyMutex { uint8_t v; }; struct _PyMutex { uint8_t v; };
#endif #endif

View File

@ -54,7 +54,7 @@ PyAPI_FUNC(int) _PyObject_IsFreed(PyObject *);
Furthermore, we can't use designated initializers in Extensions since these Furthermore, we can't use designated initializers in Extensions since these
are not supported pre-C++20. Thus, keeping an internal copy here is the most are not supported pre-C++20. Thus, keeping an internal copy here is the most
backwards compatible solution */ backwards compatible solution */
#if defined(Py_NOGIL) #if defined(Py_GIL_DISABLED)
#define _PyObject_HEAD_INIT(type) \ #define _PyObject_HEAD_INIT(type) \
{ \ { \
.ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL, \ .ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL, \
@ -103,7 +103,7 @@ static inline void _Py_RefcntAdd(PyObject* op, Py_ssize_t n)
#ifdef Py_REF_DEBUG #ifdef Py_REF_DEBUG
_Py_AddRefTotal(_PyInterpreterState_GET(), n); _Py_AddRefTotal(_PyInterpreterState_GET(), n);
#endif #endif
#if !defined(Py_NOGIL) #if !defined(Py_GIL_DISABLED)
op->ob_refcnt += n; op->ob_refcnt += n;
#else #else
if (_Py_IsOwnedByCurrentThread(op)) { if (_Py_IsOwnedByCurrentThread(op)) {
@ -128,7 +128,7 @@ static inline void _Py_RefcntAdd(PyObject* op, Py_ssize_t n)
static inline void _Py_SetImmortal(PyObject *op) static inline void _Py_SetImmortal(PyObject *op)
{ {
if (op) { if (op) {
#ifdef Py_NOGIL #ifdef Py_GIL_DISABLED
op->ob_tid = _Py_UNOWNED_TID; op->ob_tid = _Py_UNOWNED_TID;
op->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL; op->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
op->ob_ref_shared = 0; op->ob_ref_shared = 0;
@ -145,7 +145,7 @@ static inline void _Py_SetMortal(PyObject *op, Py_ssize_t refcnt)
{ {
if (op) { if (op) {
assert(_Py_IsImmortal(op)); assert(_Py_IsImmortal(op));
#ifdef Py_NOGIL #ifdef Py_GIL_DISABLED
op->ob_tid = _Py_UNOWNED_TID; op->ob_tid = _Py_UNOWNED_TID;
op->ob_ref_local = 0; op->ob_ref_local = 0;
op->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED); op->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
@ -169,7 +169,7 @@ static inline void _Py_ClearImmortal(PyObject *op)
op = NULL; \ op = NULL; \
} while (0) } while (0)
#if !defined(Py_NOGIL) #if !defined(Py_GIL_DISABLED)
static inline void static inline void
_Py_DECREF_SPECIALIZED(PyObject *op, const destructor destruct) _Py_DECREF_SPECIALIZED(PyObject *op, const destructor destruct)
{ {
@ -210,7 +210,7 @@ _Py_DECREF_NO_DEALLOC(PyObject *op)
} }
#else #else
// TODO: implement Py_DECREF specializations for Py_NOGIL build // TODO: implement Py_DECREF specializations for Py_GIL_DISABLED build
static inline void static inline void
_Py_DECREF_SPECIALIZED(PyObject *op, const destructor destruct) _Py_DECREF_SPECIALIZED(PyObject *op, const destructor destruct)
{ {
@ -238,7 +238,7 @@ _Py_REF_IS_QUEUED(Py_ssize_t ob_ref_shared)
// Merge the local and shared reference count fields and add `extra` to the // Merge the local and shared reference count fields and add `extra` to the
// refcount when merging. // refcount when merging.
Py_ssize_t _Py_ExplicitMergeRefcount(PyObject *op, Py_ssize_t extra); Py_ssize_t _Py_ExplicitMergeRefcount(PyObject *op, Py_ssize_t extra);
#endif // !defined(Py_NOGIL) #endif // !defined(Py_GIL_DISABLED)
#ifdef Py_REF_DEBUG #ifdef Py_REF_DEBUG
# undef _Py_DEC_REFTOTAL # undef _Py_DEC_REFTOTAL

View File

@ -106,9 +106,9 @@ check by comparing the reference count field to the immortality reference count.
#define _Py_IMMORTAL_REFCNT (UINT_MAX >> 2) #define _Py_IMMORTAL_REFCNT (UINT_MAX >> 2)
#endif #endif
// Py_NOGIL builds indicate immortal objects using `ob_ref_local`, which is // Py_GIL_DISABLED builds indicate immortal objects using `ob_ref_local`, which is
// always 32-bits. // always 32-bits.
#ifdef Py_NOGIL #ifdef Py_GIL_DISABLED
#define _Py_IMMORTAL_REFCNT_LOCAL UINT32_MAX #define _Py_IMMORTAL_REFCNT_LOCAL UINT32_MAX
#endif #endif
@ -117,7 +117,7 @@ check by comparing the reference count field to the immortality reference count.
// Make all internal uses of PyObject_HEAD_INIT immortal while preserving the // Make all internal uses of PyObject_HEAD_INIT immortal while preserving the
// C-API expectation that the refcnt will be set to 1. // C-API expectation that the refcnt will be set to 1.
#if defined(Py_NOGIL) #if defined(Py_GIL_DISABLED)
#define PyObject_HEAD_INIT(type) \ #define PyObject_HEAD_INIT(type) \
{ \ { \
0, \ 0, \
@ -162,7 +162,7 @@ check by comparing the reference count field to the immortality reference count.
* by hand. Similarly every pointer to a variable-size Python object can, * by hand. Similarly every pointer to a variable-size Python object can,
* in addition, be cast to PyVarObject*. * in addition, be cast to PyVarObject*.
*/ */
#ifndef Py_NOGIL #ifndef Py_GIL_DISABLED
struct _object { struct _object {
#if (defined(__GNUC__) || defined(__clang__)) \ #if (defined(__GNUC__) || defined(__clang__)) \
&& !(defined __STDC_VERSION__ && __STDC_VERSION__ >= 201112L) && !(defined __STDC_VERSION__ && __STDC_VERSION__ >= 201112L)
@ -238,7 +238,7 @@ typedef struct {
PyAPI_FUNC(int) Py_Is(PyObject *x, PyObject *y); PyAPI_FUNC(int) Py_Is(PyObject *x, PyObject *y);
#define Py_Is(x, y) ((x) == (y)) #define Py_Is(x, y) ((x) == (y))
#if defined(Py_NOGIL) && !defined(Py_LIMITED_API) #if defined(Py_GIL_DISABLED) && !defined(Py_LIMITED_API)
static inline uintptr_t static inline uintptr_t
_Py_ThreadId(void) _Py_ThreadId(void)
{ {
@ -275,7 +275,7 @@ _Py_IsOwnedByCurrentThread(PyObject *ob)
#endif #endif
static inline Py_ssize_t Py_REFCNT(PyObject *ob) { static inline Py_ssize_t Py_REFCNT(PyObject *ob) {
#if !defined(Py_NOGIL) #if !defined(Py_GIL_DISABLED)
return ob->ob_refcnt; return ob->ob_refcnt;
#else #else
uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local); uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
@ -316,7 +316,7 @@ static inline Py_ssize_t Py_SIZE(PyObject *ob) {
static inline Py_ALWAYS_INLINE int _Py_IsImmortal(PyObject *op) static inline Py_ALWAYS_INLINE int _Py_IsImmortal(PyObject *op)
{ {
#if defined(Py_NOGIL) #if defined(Py_GIL_DISABLED)
return op->ob_ref_local == _Py_IMMORTAL_REFCNT_LOCAL; return op->ob_ref_local == _Py_IMMORTAL_REFCNT_LOCAL;
#elif SIZEOF_VOID_P > 4 #elif SIZEOF_VOID_P > 4
return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0; return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
@ -350,7 +350,7 @@ static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
if (_Py_IsImmortal(ob)) { if (_Py_IsImmortal(ob)) {
return; return;
} }
#ifndef Py_NOGIL #ifndef Py_GIL_DISABLED
ob->ob_refcnt = refcnt; ob->ob_refcnt = refcnt;
#else #else
if (_Py_IsOwnedByCurrentThread(ob)) { if (_Py_IsOwnedByCurrentThread(ob)) {
@ -367,7 +367,7 @@ static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
ob->ob_ref_local = 0; ob->ob_ref_local = 0;
ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED); ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
} }
#endif // Py_NOGIL #endif // Py_GIL_DISABLED
#endif // Py_LIMITED_API+0 < 0x030d0000 #endif // Py_LIMITED_API+0 < 0x030d0000
} }
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000 #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
@ -746,7 +746,7 @@ static inline Py_ALWAYS_INLINE void Py_INCREF(PyObject *op)
#else #else
// Non-limited C API and limited C API for Python 3.9 and older access // Non-limited C API and limited C API for Python 3.9 and older access
// directly PyObject.ob_refcnt. // directly PyObject.ob_refcnt.
#if defined(Py_NOGIL) #if defined(Py_GIL_DISABLED)
uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local); uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
uint32_t new_local = local + 1; uint32_t new_local = local + 1;
if (new_local == 0) { if (new_local == 0) {
@ -784,7 +784,7 @@ static inline Py_ALWAYS_INLINE void Py_INCREF(PyObject *op)
#endif #endif
#if !defined(Py_LIMITED_API) && defined(Py_NOGIL) #if !defined(Py_LIMITED_API) && defined(Py_GIL_DISABLED)
// Implements Py_DECREF on objects not owned by the current thread. // Implements Py_DECREF on objects not owned by the current thread.
PyAPI_FUNC(void) _Py_DecRefShared(PyObject *); PyAPI_FUNC(void) _Py_DecRefShared(PyObject *);
PyAPI_FUNC(void) _Py_DecRefSharedDebug(PyObject *, const char *, int); PyAPI_FUNC(void) _Py_DecRefSharedDebug(PyObject *, const char *, int);
@ -810,7 +810,7 @@ static inline void Py_DECREF(PyObject *op) {
} }
#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op)) #define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
#elif defined(Py_NOGIL) && defined(Py_REF_DEBUG) #elif defined(Py_GIL_DISABLED) && defined(Py_REF_DEBUG)
static inline void Py_DECREF(const char *filename, int lineno, PyObject *op) static inline void Py_DECREF(const char *filename, int lineno, PyObject *op)
{ {
uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local); uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
@ -835,7 +835,7 @@ static inline void Py_DECREF(const char *filename, int lineno, PyObject *op)
} }
#define Py_DECREF(op) Py_DECREF(__FILE__, __LINE__, _PyObject_CAST(op)) #define Py_DECREF(op) Py_DECREF(__FILE__, __LINE__, _PyObject_CAST(op))
#elif defined(Py_NOGIL) #elif defined(Py_GIL_DISABLED)
static inline void Py_DECREF(PyObject *op) static inline void Py_DECREF(PyObject *op)
{ {
uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local); uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);

View File

@ -348,7 +348,7 @@ def _init_non_posix(vars):
vars['BINLIBDEST'] = get_path('platstdlib') vars['BINLIBDEST'] = get_path('platstdlib')
vars['INCLUDEPY'] = get_path('include') vars['INCLUDEPY'] = get_path('include')
# Add EXT_SUFFIX, SOABI, and Py_NOGIL # Add EXT_SUFFIX, SOABI, and Py_GIL_DISABLED
vars.update(_sysconfig.config_vars()) vars.update(_sysconfig.config_vars())
vars['LIBDIR'] = _safe_realpath(os.path.join(get_config_var('installed_base'), 'libs')) vars['LIBDIR'] = _safe_realpath(os.path.join(get_config_var('installed_base'), 'libs'))

View File

@ -290,7 +290,7 @@ def get_build_info():
build = [] build = []
# --disable-gil # --disable-gil
if sysconfig.get_config_var('Py_NOGIL'): if sysconfig.get_config_var('Py_GIL_DISABLED'):
build.append("nogil") build.append("nogil")
if hasattr(sys, 'gettotalrefcount'): if hasattr(sys, 'gettotalrefcount'):

View File

@ -517,7 +517,7 @@ def collect_sysconfig(info_add):
'PY_STDMODULE_CFLAGS', 'PY_STDMODULE_CFLAGS',
'Py_DEBUG', 'Py_DEBUG',
'Py_ENABLE_SHARED', 'Py_ENABLE_SHARED',
'Py_NOGIL', 'Py_GIL_DISABLED',
'SHELL', 'SHELL',
'SOABI', 'SOABI',
'abs_builddir', 'abs_builddir',

View File

@ -796,7 +796,7 @@ def check_cflags_pgo():
return any(option in cflags_nodist for option in pgo_options) return any(option in cflags_nodist for option in pgo_options)
if sysconfig.get_config_var('Py_NOGIL'): if sysconfig.get_config_var('Py_GIL_DISABLED'):
_header = 'PHBBInP' _header = 'PHBBInP'
else: else:
_header = 'nP' _header = 'nP'

View File

@ -15,7 +15,7 @@ SETUP = os.path.join(os.path.dirname(__file__), 'setup.py')
# gh-110119: pip does not currently support 't' in the ABI flag use by # gh-110119: pip does not currently support 't' in the ABI flag use by
# --disable-gil builds. Once it does, we can remove this skip. # --disable-gil builds. Once it does, we can remove this skip.
@unittest.skipIf(sysconfig.get_config_var('Py_NOGIL') == 1, @unittest.skipIf(sysconfig.get_config_var('Py_GIL_DISABLED') == 1,
'test does not work with --disable-gil') 'test does not work with --disable-gil')
@support.requires_subprocess() @support.requires_subprocess()
class TestCPPExt(unittest.TestCase): class TestCPPExt(unittest.TestCase):

View File

@ -112,7 +112,7 @@ class WindowsRegistryFinderTests:
class WindowsExtensionSuffixTests: class WindowsExtensionSuffixTests:
def test_tagged_suffix(self): def test_tagged_suffix(self):
suffixes = self.machinery.EXTENSION_SUFFIXES suffixes = self.machinery.EXTENSION_SUFFIXES
abi_flags = "t" if sysconfig.get_config_var("Py_NOGIL") else "" abi_flags = "t" if sysconfig.get_config_var("Py_GIL_DISABLED") else ""
ver = sys.version_info ver = sys.version_info
platform = re.sub('[^a-zA-Z0-9]', '_', get_platform()) platform = re.sub('[^a-zA-Z0-9]', '_', get_platform())
expected_tag = f".cp{ver.major}{ver.minor}{abi_flags}-{platform}.pyd" expected_tag = f".cp{ver.major}{ver.minor}{abi_flags}-{platform}.pyd"

View File

@ -1209,7 +1209,7 @@ class SysModuleTest(unittest.TestCase):
@unittest.skipUnless(hasattr(sys, 'abiflags'), 'need sys.abiflags') @unittest.skipUnless(hasattr(sys, 'abiflags'), 'need sys.abiflags')
def test_disable_gil_abi(self): def test_disable_gil_abi(self):
abi_threaded = 't' in sys.abiflags abi_threaded = 't' in sys.abiflags
py_nogil = (sysconfig.get_config_var('Py_NOGIL') == 1) py_nogil = (sysconfig.get_config_var('Py_GIL_DISABLED') == 1)
self.assertEqual(py_nogil, abi_threaded) self.assertEqual(py_nogil, abi_threaded)

View File

@ -0,0 +1 @@
Rename ``Py_NOGIL`` to ``Py_GIL_DISABLED``. Patch by Hugo van Kemenade.

View File

@ -1,8 +1,8 @@
#ifndef _MSC_VER #ifndef _MSC_VER
#include "pyconfig.h" // Py_NOGIL #include "pyconfig.h" // Py_GIL_DISABLED
#endif #endif
#ifndef Py_NOGIL #ifndef Py_GIL_DISABLED
// Need limited C API version 3.12 for Py_MOD_PER_INTERPRETER_GIL_SUPPORTED // Need limited C API version 3.12 for Py_MOD_PER_INTERPRETER_GIL_SUPPORTED
#define Py_LIMITED_API 0x030c0000 #define Py_LIMITED_API 0x030c0000
#endif #endif

View File

@ -2,9 +2,9 @@
posixshmem - A Python extension that provides shm_open() and shm_unlink() posixshmem - A Python extension that provides shm_open() and shm_unlink()
*/ */
#include "pyconfig.h" // Py_NOGIL #include "pyconfig.h" // Py_GIL_DISABLED
#ifndef Py_NOGIL #ifndef Py_GIL_DISABLED
// Need limited C API version 3.12 for Py_MOD_PER_INTERPRETER_GIL_SUPPORTED // Need limited C API version 3.12 for Py_MOD_PER_INTERPRETER_GIL_SUPPORTED
#define Py_LIMITED_API 0x030c0000 #define Py_LIMITED_API 0x030c0000
#endif #endif

View File

@ -4,10 +4,10 @@
*/ */
#ifndef _MSC_VER #ifndef _MSC_VER
#include "pyconfig.h" // Py_NOGIL #include "pyconfig.h" // Py_GIL_DISABLED
#endif #endif
#ifndef Py_NOGIL #ifndef Py_GIL_DISABLED
// Need limited C API version 3.12 for Py_MOD_PER_INTERPRETER_GIL_SUPPORTED // Need limited C API version 3.12 for Py_MOD_PER_INTERPRETER_GIL_SUPPORTED
#define Py_LIMITED_API 0x030c0000 #define Py_LIMITED_API 0x030c0000
#endif #endif

View File

@ -12,10 +12,10 @@
*/ */
#ifndef _MSC_VER #ifndef _MSC_VER
#include "pyconfig.h" // Py_NOGIL #include "pyconfig.h" // Py_GIL_DISABLED
#endif #endif
#ifndef Py_NOGIL #ifndef Py_GIL_DISABLED
// Need limited C API version 3.13 for PyModule_Add() on Windows // Need limited C API version 3.13 for PyModule_Add() on Windows
#define Py_LIMITED_API 0x030d0000 #define Py_LIMITED_API 0x030d0000
#endif #endif

View File

@ -57,12 +57,12 @@ _sysconfig_config_vars_impl(PyObject *module)
} }
#endif #endif
#ifdef Py_NOGIL #ifdef Py_GIL_DISABLED
PyObject *py_nogil = _PyLong_GetOne(); PyObject *py_nogil = _PyLong_GetOne();
#else #else
PyObject *py_nogil = _PyLong_GetZero(); PyObject *py_nogil = _PyLong_GetZero();
#endif #endif
if (PyDict_SetItemString(config, "Py_NOGIL", py_nogil) < 0) { if (PyDict_SetItemString(config, "Py_GIL_DISABLED", py_nogil) < 0) {
Py_DECREF(config); Py_DECREF(config);
return NULL; return NULL;
} }

View File

@ -1,8 +1,8 @@
#ifndef _MSC_VER #ifndef _MSC_VER
#include "pyconfig.h" // Py_NOGIL #include "pyconfig.h" // Py_GIL_DISABLED
#endif #endif
#ifndef Py_NOGIL #ifndef Py_GIL_DISABLED
#define Py_LIMITED_API 0x030c0000 // 3.12 #define Py_LIMITED_API 0x030c0000 // 3.12
#endif #endif

View File

@ -1,10 +1,10 @@
/* Test Vectorcall in the limited API */ /* Test Vectorcall in the limited API */
#ifndef _MSC_VER #ifndef _MSC_VER
#include "pyconfig.h" // Py_NOGIL #include "pyconfig.h" // Py_GIL_DISABLED
#endif #endif
#ifndef Py_NOGIL #ifndef Py_GIL_DISABLED
#define Py_LIMITED_API 0x030c0000 // 3.12 #define Py_LIMITED_API 0x030c0000 // 3.12
#endif #endif

View File

@ -5,10 +5,10 @@
#undef Py_BUILD_CORE_BUILTIN #undef Py_BUILD_CORE_BUILTIN
#ifndef _MSC_VER #ifndef _MSC_VER
#include "pyconfig.h" // Py_NOGIL #include "pyconfig.h" // Py_GIL_DISABLED
#endif #endif
#ifndef Py_NOGIL #ifndef Py_GIL_DISABLED
// For now, only limited C API 3.13 is supported // For now, only limited C API 3.13 is supported
#define Py_LIMITED_API 0x030d0000 #define Py_LIMITED_API 0x030d0000
#endif #endif

View File

@ -5,10 +5,10 @@
*/ */
#ifndef _MSC_VER #ifndef _MSC_VER
#include "pyconfig.h" // Py_NOGIL #include "pyconfig.h" // Py_GIL_DISABLED
#endif #endif
#ifndef Py_NOGIL #ifndef Py_GIL_DISABLED
#define Py_LIMITED_API 0x03020000 #define Py_LIMITED_API 0x03020000
#endif #endif

View File

@ -6,7 +6,7 @@
#include "pycore_critical_section.h" #include "pycore_critical_section.h"
#ifdef Py_NOGIL #ifdef Py_GIL_DISABLED
#define assert_nogil assert #define assert_nogil assert
#define assert_gil(x) #define assert_gil(x)
#else #else
@ -25,7 +25,7 @@ test_critical_sections(PyObject *self, PyObject *Py_UNUSED(args))
assert(d2 != NULL); assert(d2 != NULL);
// Beginning a critical section should lock the associated object and // Beginning a critical section should lock the associated object and
// push the critical section onto the thread's stack (in Py_NOGIL builds). // push the critical section onto the thread's stack (in Py_GIL_DISABLED builds).
Py_BEGIN_CRITICAL_SECTION(d1); Py_BEGIN_CRITICAL_SECTION(d1);
assert_nogil(PyMutex_IsLocked(&d1->ob_mutex)); assert_nogil(PyMutex_IsLocked(&d1->ob_mutex));
assert_nogil(_PyCriticalSection_IsActive(PyThreadState_GET()->critical_section)); assert_nogil(_PyCriticalSection_IsActive(PyThreadState_GET()->critical_section));

View File

@ -4,10 +4,10 @@
*/ */
#ifndef _MSC_VER #ifndef _MSC_VER
#include "pyconfig.h" // Py_NOGIL #include "pyconfig.h" // Py_GIL_DISABLED
#endif #endif
#ifndef Py_NOGIL #ifndef Py_GIL_DISABLED
// Need limited C API version 3.12 for Py_MOD_PER_INTERPRETER_GIL_SUPPORTED // Need limited C API version 3.12 for Py_MOD_PER_INTERPRETER_GIL_SUPPORTED
#define Py_LIMITED_API 0x030c0000 #define Py_LIMITED_API 0x030c0000
#endif #endif

View File

@ -1,10 +1,10 @@
/* Errno module */ /* Errno module */
#ifndef _MSC_VER #ifndef _MSC_VER
#include "pyconfig.h" // Py_NOGIL #include "pyconfig.h" // Py_GIL_DISABLED
#endif #endif
#ifndef Py_NOGIL #ifndef Py_GIL_DISABLED
// Need limited C API version 3.12 for Py_MOD_PER_INTERPRETER_GIL_SUPPORTED // Need limited C API version 3.12 for Py_MOD_PER_INTERPRETER_GIL_SUPPORTED
#define Py_LIMITED_API 0x030c0000 #define Py_LIMITED_API 0x030c0000
#endif #endif

View File

@ -58,7 +58,7 @@
PyMutex_Unlock(&(obj)->mutex); \ PyMutex_Unlock(&(obj)->mutex); \
} }
#ifdef Py_NOGIL #ifdef Py_GIL_DISABLED
#define HASHLIB_INIT_MUTEX(obj) \ #define HASHLIB_INIT_MUTEX(obj) \
do { \ do { \
(obj)->mutex = (PyMutex){0}; \ (obj)->mutex = (PyMutex){0}; \

View File

@ -1,8 +1,8 @@
#ifndef _MSC_VER #ifndef _MSC_VER
#include "pyconfig.h" // Py_NOGIL #include "pyconfig.h" // Py_GIL_DISABLED
#endif #endif
#ifndef Py_NOGIL #ifndef Py_GIL_DISABLED
// Need limited C API version 3.13 for PySys_Audit() // Need limited C API version 3.13 for PySys_Audit()
#define Py_LIMITED_API 0x030d0000 #define Py_LIMITED_API 0x030d0000
#endif #endif

View File

@ -63,10 +63,10 @@
*/ */
#ifndef _MSC_VER #ifndef _MSC_VER
#include "pyconfig.h" // Py_NOGIL #include "pyconfig.h" // Py_GIL_DISABLED
#endif #endif
#ifndef Py_NOGIL #ifndef Py_GIL_DISABLED
// Need limited C API version 3.12 for Py_MOD_PER_INTERPRETER_GIL_SUPPORTED // Need limited C API version 3.12 for Py_MOD_PER_INTERPRETER_GIL_SUPPORTED
#define Py_LIMITED_API 0x030c0000 #define Py_LIMITED_API 0x030c0000
#endif #endif

View File

@ -6,10 +6,10 @@
*/ */
#ifndef _MSC_VER #ifndef _MSC_VER
#include "pyconfig.h" // Py_NOGIL #include "pyconfig.h" // Py_GIL_DISABLED
#endif #endif
#ifndef Py_NOGIL #ifndef Py_GIL_DISABLED
#define Py_LIMITED_API 0x03050000 #define Py_LIMITED_API 0x03050000
#endif #endif

View File

@ -296,7 +296,7 @@ _Py_DecRef(PyObject *o)
Py_DECREF(o); Py_DECREF(o);
} }
#ifdef Py_NOGIL #ifdef Py_GIL_DISABLED
# ifdef Py_REF_DEBUG # ifdef Py_REF_DEBUG
static inline int static inline int
is_shared_refcnt_dead(Py_ssize_t shared) is_shared_refcnt_dead(Py_ssize_t shared)
@ -414,7 +414,7 @@ _Py_ExplicitMergeRefcount(PyObject *op, Py_ssize_t extra)
_Py_atomic_store_uintptr_relaxed(&op->ob_tid, 0); _Py_atomic_store_uintptr_relaxed(&op->ob_tid, 0);
return refcnt; return refcnt;
} }
#endif /* Py_NOGIL */ #endif /* Py_GIL_DISABLED */
/**************************************/ /**************************************/
@ -2359,7 +2359,7 @@ new_reference(PyObject *op)
_PyTraceMalloc_NewReference(op); _PyTraceMalloc_NewReference(op);
} }
// Skip the immortal object check in Py_SET_REFCNT; always set refcnt to 1 // Skip the immortal object check in Py_SET_REFCNT; always set refcnt to 1
#if !defined(Py_NOGIL) #if !defined(Py_GIL_DISABLED)
op->ob_refcnt = 1; op->ob_refcnt = 1;
#else #else
op->ob_tid = _Py_ThreadId(); op->ob_tid = _Py_ThreadId();

View File

@ -35,7 +35,7 @@
winsound.PlaySound(None, 0) winsound.PlaySound(None, 0)
*/ */
#ifndef Py_NOGIL #ifndef Py_GIL_DISABLED
// Need limited C API version 3.12 for Py_MOD_PER_INTERPRETER_GIL_SUPPORTED // Need limited C API version 3.12 for Py_MOD_PER_INTERPRETER_GIL_SUPPORTED
#define Py_LIMITED_API 0x030c0000 #define Py_LIMITED_API 0x030c0000
#endif #endif

View File

@ -40,7 +40,7 @@
<ClCompile> <ClCompile>
<AdditionalIncludeDirectories>$(PySourcePath)Include;$(PySourcePath)Include\internal;$(PySourcePath)Include\internal\mimalloc;$(PySourcePath)PC;$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>$(PySourcePath)Include;$(PySourcePath)Include\internal;$(PySourcePath)Include\internal\mimalloc;$(PySourcePath)PC;$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;$(_Py3NamePreprocessorDefinition);$(_PlatformPreprocessorDefinition)$(_DebugPreprocessorDefinition)$(_PydPreprocessorDefinition)%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>WIN32;$(_Py3NamePreprocessorDefinition);$(_PlatformPreprocessorDefinition)$(_DebugPreprocessorDefinition)$(_PydPreprocessorDefinition)%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(DisableGil)' == 'true'">Py_NOGIL=1;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions Condition="'$(DisableGil)' == 'true'">Py_GIL_DISABLED=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(SupportPGO)' and ($(Configuration) == 'PGInstrument' or $(Configuration) == 'PGUpdate')">_Py_USING_PGO=1;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions Condition="'$(SupportPGO)' and ($(Configuration) == 'PGInstrument' or $(Configuration) == 'PGUpdate')">_Py_USING_PGO=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<Optimization>MaxSpeed</Optimization> <Optimization>MaxSpeed</Optimization>

View File

@ -46,13 +46,13 @@
# error "ceval.c must be build with Py_BUILD_CORE define for best performance" # error "ceval.c must be build with Py_BUILD_CORE define for best performance"
#endif #endif
#if !defined(Py_DEBUG) && !defined(Py_TRACE_REFS) && !defined(Py_NOGIL) #if !defined(Py_DEBUG) && !defined(Py_TRACE_REFS) && !defined(Py_GIL_DISABLED)
// GH-89279: The MSVC compiler does not inline these static inline functions // GH-89279: The MSVC compiler does not inline these static inline functions
// in PGO build in _PyEval_EvalFrameDefault(), because this function is over // in PGO build in _PyEval_EvalFrameDefault(), because this function is over
// the limit of PGO, and that limit cannot be configured. // the limit of PGO, and that limit cannot be configured.
// Define them as macros to make sure that they are always inlined by the // Define them as macros to make sure that they are always inlined by the
// preprocessor. // preprocessor.
// TODO: implement Py_DECREF macro for Py_NOGIL // TODO: implement Py_DECREF macro for Py_GIL_DISABLED
#undef Py_DECREF #undef Py_DECREF
#define Py_DECREF(arg) \ #define Py_DECREF(arg) \

View File

@ -21,7 +21,7 @@ static const _PyTime_t TIME_TO_BE_FAIR_NS = 1000*1000;
// Spin for a bit before parking the thread. This is only enabled for // Spin for a bit before parking the thread. This is only enabled for
// `--disable-gil` builds because it is unlikely to be helpful if the GIL is // `--disable-gil` builds because it is unlikely to be helpful if the GIL is
// enabled. // enabled.
#if Py_NOGIL #if Py_GIL_DISABLED
static const int MAX_SPIN_COUNT = 40; static const int MAX_SPIN_COUNT = 40;
#else #else
static const int MAX_SPIN_COUNT = 0; static const int MAX_SPIN_COUNT = 0;

View File

@ -1857,7 +1857,7 @@ tstate_deactivate(PyThreadState *tstate)
static int static int
tstate_try_attach(PyThreadState *tstate) tstate_try_attach(PyThreadState *tstate)
{ {
#ifdef Py_NOGIL #ifdef Py_GIL_DISABLED
int expected = _Py_THREAD_DETACHED; int expected = _Py_THREAD_DETACHED;
if (_Py_atomic_compare_exchange_int( if (_Py_atomic_compare_exchange_int(
&tstate->state, &tstate->state,
@ -1877,7 +1877,7 @@ static void
tstate_set_detached(PyThreadState *tstate) tstate_set_detached(PyThreadState *tstate)
{ {
assert(tstate->state == _Py_THREAD_ATTACHED); assert(tstate->state == _Py_THREAD_ATTACHED);
#ifdef Py_NOGIL #ifdef Py_GIL_DISABLED
_Py_atomic_store_int(&tstate->state, _Py_THREAD_DETACHED); _Py_atomic_store_int(&tstate->state, _Py_THREAD_DETACHED);
#else #else
tstate->state = _Py_THREAD_DETACHED; tstate->state = _Py_THREAD_DETACHED;

2
configure generated vendored
View File

@ -7883,7 +7883,7 @@ printf "%s\n" "$disable_gil" >&6; }
if test "$disable_gil" = "yes" if test "$disable_gil" = "yes"
then then
printf "%s\n" "#define Py_NOGIL 1" >>confdefs.h printf "%s\n" "#define Py_GIL_DISABLED 1" >>confdefs.h
# Add "t" for "threaded" # Add "t" for "threaded"
ABIFLAGS="${ABIFLAGS}t" ABIFLAGS="${ABIFLAGS}t"

View File

@ -1505,7 +1505,7 @@ AC_MSG_RESULT([$disable_gil])
if test "$disable_gil" = "yes" if test "$disable_gil" = "yes"
then then
AC_DEFINE([Py_NOGIL], [1], AC_DEFINE([Py_GIL_DISABLED], [1],
[Define if you want to disable the GIL]) [Define if you want to disable the GIL])
# Add "t" for "threaded" # Add "t" for "threaded"
ABIFLAGS="${ABIFLAGS}t" ABIFLAGS="${ABIFLAGS}t"

View File

@ -1611,13 +1611,13 @@
/* Defined if Python is built as a shared library. */ /* Defined if Python is built as a shared library. */
#undef Py_ENABLE_SHARED #undef Py_ENABLE_SHARED
/* Define if you want to disable the GIL */
#undef Py_GIL_DISABLED
/* Define hash algorithm for str, bytes and memoryview. SipHash24: 1, FNV: 2, /* Define hash algorithm for str, bytes and memoryview. SipHash24: 1, FNV: 2,
SipHash13: 3, externally defined: 0 */ SipHash13: 3, externally defined: 0 */
#undef Py_HASH_ALGORITHM #undef Py_HASH_ALGORITHM
/* Define if you want to disable the GIL */
#undef Py_NOGIL
/* Define if you want to enable internal statistics gathering. */ /* Define if you want to enable internal statistics gathering. */
#undef Py_STATS #undef Py_STATS