The free-threaded GC uses mimallocs segment thread IDs to restore
the overwritten `ob_tid` thread ids in PyObjects. For that reason, it's
important that PyObjects and mimalloc use the same identifiers.
static inline mi_threadid_t _mi_prim_thread_id(void) mi_attr_noexcept;
-#if defined(_WIN32)
+#ifdef MI_PRIM_THREAD_ID
+
+static inline mi_threadid_t _mi_prim_thread_id(void) mi_attr_noexcept {
+ return MI_PRIM_THREAD_ID();
+}
+
+#elif defined(_WIN32)
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include "pycore_pymem.h"
#ifdef WITH_MIMALLOC
-#define MI_DEBUG_UNINIT PYMEM_CLEANBYTE
-#define MI_DEBUG_FREED PYMEM_DEADBYTE
-#define MI_DEBUG_PADDING PYMEM_FORBIDDENBYTE
+# ifdef Py_GIL_DISABLED
+# define MI_PRIM_THREAD_ID _Py_ThreadId
+# endif
+# define MI_DEBUG_UNINIT PYMEM_CLEANBYTE
+# define MI_DEBUG_FREED PYMEM_DEADBYTE
+# define MI_DEBUG_PADDING PYMEM_FORBIDDENBYTE
#ifdef Py_DEBUG
# define MI_DEBUG 1
#else