summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSam Gross <colesbury@gmail.com>2024-03-05 18:54:20 (GMT)
committerGitHub <noreply@github.com>2024-03-05 18:54:20 (GMT)
commit72714c0266ce6d39c7c7fb63f617573b8f5a3cb2 (patch)
tree5542da152c1074e606ab1d058191c96b7217e594
parentdab85e01898ae737ba6197199090a51a6d4dd1fb (diff)
downloadcpython-72714c0266ce6d39c7c7fb63f617573b8f5a3cb2.zip
cpython-72714c0266ce6d39c7c7fb63f617573b8f5a3cb2.tar.gz
cpython-72714c0266ce6d39c7c7fb63f617573b8f5a3cb2.tar.bz2
gh-115103: Enable internal mimalloc assertions in debug builds (#116343)
This sets `MI_DEBUG` to `2` in debug builds to enable `mi_assert_internal()` calls. Expensive internal assertions are not enabled. This also disables an assertion in free-threaded builds that would be triggered by the free-threaded GC because we traverse heaps that are not owned by the current thread.
-rw-r--r--Include/internal/pycore_mimalloc.h2
-rw-r--r--Objects/mimalloc/alloc.c3
2 files changed, 4 insertions, 1 deletions
diff --git a/Include/internal/pycore_mimalloc.h b/Include/internal/pycore_mimalloc.h
index 14c9810..44c160b 100644
--- a/Include/internal/pycore_mimalloc.h
+++ b/Include/internal/pycore_mimalloc.h
@@ -27,7 +27,7 @@ typedef enum {
# define MI_DEBUG_FREED PYMEM_DEADBYTE
# define MI_DEBUG_PADDING PYMEM_FORBIDDENBYTE
#ifdef Py_DEBUG
-# define MI_DEBUG 1
+# define MI_DEBUG 2
#else
# define MI_DEBUG 0
#endif
diff --git a/Objects/mimalloc/alloc.c b/Objects/mimalloc/alloc.c
index e6286b5..c133f23 100644
--- a/Objects/mimalloc/alloc.c
+++ b/Objects/mimalloc/alloc.c
@@ -609,7 +609,10 @@ bool _mi_free_delayed_block(mi_block_t* block) {
// get segment and page
const mi_segment_t* const segment = _mi_ptr_segment(block);
mi_assert_internal(_mi_ptr_cookie(segment) == segment->cookie);
+#ifndef Py_GIL_DISABLED
+ // The GC traverses heaps of other threads, which can trigger this assert.
mi_assert_internal(_mi_thread_id() == segment->thread_id);
+#endif
mi_page_t* const page = _mi_segment_page_of(segment, block);
// Clear the no-delayed flag so delayed freeing is used again for this page.