Closed
Description
Bug report
Bug description:
It should be possible to build a C extension module using GCC on Windows, but when defining Py_GIL_DISABLED any call to _Py_ThreadId fails.
The if/defs in _Py_ThreadId look for _MSC_VER to be defined to determine whether it's a Windows build or not, but that specifies the VS version and not whether the build is for Windows or not.
Instead it would be better to use _WIN32 (see https://learn.microsoft.com/en-us/cpp/preprocessor/predefined-macros?view=msvc-170)
Something along these lines...
#if defined(_WIN32)
#include <intrin.h>
#endif
static inline uintptr_t
_Py_ThreadId(void)
{
uintptr_t tid;
#if defined(_WIN32) && defined(_M_X64)
tid = __readgsqword(48);
#elif defined(_WIN32) && defined(_M_IX86)
tid = __readfsdword(24);
#elif defined(_WIN32) && defined(_M_ARM64)
tid = __getReg(18);
...
CPython versions tested on:
3.13
Operating systems tested on:
Windows