Skip to content

[3.15] profiling.sampling may cause assertssertion `!(has_gil && gil_requested)' failed. #142207

@yihong0618

Description

@yihong0618

Bug report

Bug description:

./configure --with-pydebug
make -j8
./python -m profiling.sampling run --live -i 1 -d 100000 -a -m test  
# waiting but not 100% reproducer
Image

easy way reproducer

diff --git a/Python/ceval_gil.c b/Python/ceval_gil.c
index f6ada3892f8..a5b1290ac70 100644
--- a/Python/ceval_gil.c
+++ b/Python/ceval_gil.c
@@ -409,9 +409,9 @@ take_gil(PyThreadState *tstate)
         _PyThreadState_HangThread(tstate);
     }
     assert(_PyThreadState_CheckConsistency(tstate));
-
-    tstate->gil_requested = 0;
     tstate->holds_gil = 1;
+    for (volatile int _i = 0; _i < 10; _i++) {}  // Widen window
+    tstate->gil_requested = 0;
     _Py_unset_eval_breaker_bit(tstate, _PY_GIL_DROP_REQUEST_BIT);
     update_eval_breaker_for_thread(interp, tstate);
 

then its 100% reproduce

./python -m profiling.sampling run --live -i 1 -d 100000 -a -m test 

the fix:
seems because its remote we can not fix it in ceval_gil.c
and drop the assert way works in my side

diff --git a/Modules/_remote_debugging/threads.c b/Modules/_remote_debugging/threads.c
index 99147b01a1b..69a85761562 100644
--- a/Modules/_remote_debugging/threads.c
+++ b/Modules/_remote_debugging/threads.c
@@ -335,12 +335,9 @@ unwind_stack_for_thread(
 #endif
     if (has_gil) {
         status_flags |= THREAD_STATUS_HAS_GIL;
+        gil_requested = 0;
     }
 
-    // Assert that we never have both HAS_GIL and GIL_REQUESTED set at the same time
-    // This would indicate a race condition in the GIL state tracking
-    assert(!(has_gil && gil_requested));
-
     // Check CPU status
     long pthread_id = GET_MEMBER(long, ts, unwinder->debug_offsets.thread_state.thread_id);
 

CPython versions tested on:

CPython main branch

Operating systems tested on:

Linux

Metadata

Metadata

Assignees

No one assigned

    Labels

    stdlibStandard Library Python modules in the Lib/ directorytopic-profilingtype-bugAn unexpected behavior, bug, or error

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions