]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-115103: Enable internal mimalloc assertions in debug builds (#116343)
authorSam Gross <colesbury@gmail.com>
Tue, 5 Mar 2024 18:54:20 +0000 (13:54 -0500)
committerGitHub <noreply@github.com>
Tue, 5 Mar 2024 18:54:20 +0000 (13:54 -0500)
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.

Include/internal/pycore_mimalloc.h
Objects/mimalloc/alloc.c

index 14c98108ec131e0f8c52ef5f80e4586e9b911f4e..44c160b7ac19bfdf0cee90d5d4f78831ff6cf9f5 100644 (file)
@@ -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
index e6286b54bedc1449fd52c3fed2844b6439dc31ca..c133f23fc9830d80bc5d0789757315aff8158148 100644 (file)
@@ -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.