python / python/cpython

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

オープン
#121,065 コメント 7 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

tests topic-free-threading type-bug
主要言語
Python
スター
77.2k
フォーク
35.9k
PR マージ指標
PR 指標を取得中

説明

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
  • gh-121100

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

Lib/test/test_signal.py から始め、特に test_stress_modifying_handlers、cycle_handlers、custom_handler を確認してから、Lib/signal.py の _enum_to_int 周辺を調べてください。現在のコンテキストについては、リンクされている gh-121100 の作業を確認してください。Thread Sanitizer の Free-Threading 実行で test_signal テストが RecursionError を発生させなくなれば完了です。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
python
領域
backend, testing-qa
issue の種類
バグ
難易度
3/5
見積もり時間
1〜2日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
25/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。