python / cpython

The Python programming language
https://www.python.org/
Other
60.87k stars 29.39k forks source link

Thread sanitizer (free-threading) tests fail: test_signal raises RecursionError #121065

Open sobolevn opened 1 week ago

sobolevn commented 1 week ago

Bug report

 0:02:53 load avg: 5.00 [ 9/22/1] test_signal failed (1 error) (1 min 1 sec) -- running (3): test_logging (2 min 13 sec), test_io (2 min 17 sec), test_queue (1 min 52 sec)
test test_signal failed -- Traceback (most recent call last):
  File "/home/runner/work/cpython/cpython/Lib/test/test_signal.py", line 1384, in test_stress_modifying_handlers
    cycle_handlers()
    ~~~~~~~~~~~~~~^^
  File "/home/runner/work/cpython/cpython/Lib/test/test_signal.py", line 1374, in cycle_handlers
    signal.signal(signum, handler)
    ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/home/runner/work/cpython/cpython/Lib/signal.py", line 58, in signal
    handler = _signal.signal(_enum_to_int(signalnum), _enum_to_int(handler))
                             ~~~~~~~~~~~~^^^^^^^^^^^
  File "/home/runner/work/cpython/cpython/Lib/signal.py", line 41, in _enum_to_int
    return int(value)
  File "/home/runner/work/cpython/cpython/Lib/test/test_signal.py", line 1359, in custom_handler
    def custom_handler(signum, frame):

  File "/home/runner/work/cpython/cpython/Lib/test/test_signal.py", line 1359, in custom_handler
    def custom_handler(signum, frame):

  File "/home/runner/work/cpython/cpython/Lib/test/test_signal.py", line 1359, in custom_handler
    def custom_handler(signum, frame):

  [Previous line repeated 237 more times]
RecursionError: maximum recursion depth exceeded

Link: https://github.com/python/cpython/actions/runs/9686054998/job/26727620578

Linked PRs

skirpichev commented 1 week ago

I don't see similar failures before this merge: https://github.com/python/cpython/commit/22b0de2755ee2d0e2dd21cd8761f15421ed2da3d

Fidget-Spinner commented 1 week ago

@skirpichev @sobolevn that test is flaky. for example, after https://github.com/python/cpython/commit/22b0de2755ee2d0e2dd21cd8761f15421ed2da3d, 6f7acaab508edac3dff376912b85cf46a8671e72 passed perfectly fine.

Fidget-Spinner commented 1 week ago

Another example: https://github.com/python/cpython/pull/121083 came after that commit, and still passes that test.

vstinner commented 1 week ago

Maybe we can reduce the number of signals sent, or increase the recursion limit.

colesbury commented 1 week ago

Let's disable the test for now and then investigate the root cause.