Skip to content

Commit

Permalink
pythongh-112529: Use _PyThread_Id() in mimalloc (free-threaded build)
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
colesbury committed Feb 14, 2024
1 parent bb791c7 commit b8a58a2
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 4 deletions.
8 changes: 7 additions & 1 deletion Include/internal/mimalloc/mimalloc/prim.h
Expand Up @@ -131,7 +131,13 @@ extern bool _mi_process_is_initialized; // has mi_process_init been

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>
Expand Down
9 changes: 6 additions & 3 deletions Include/internal/pycore_mimalloc.h
Expand Up @@ -20,9 +20,12 @@ typedef enum {
#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
Expand Down

0 comments on commit b8a58a2

Please sign in to comment.