Data race: `sys.addaudithook()` lazily creates `interp->audit_hooks` with no lock
オープン
@sobolevn がすでに取り組んでいます。
2026年7月22日 から。
extension-modules
topic-free-threading
type-bug
- 主要言語
- Python
- スター
- 77.2k
- フォーク
- 35.9k
- PR マージ指標
- PR 指標を取得中
説明
Bug report
Full report: https://gist.github.com/devdanzin/0b13838fd6089e73a3f063ed8f68e733
Repro:
import sys, threading
assert not sys._is_gil_enabled(), "run free-threaded: PYTHON_GIL=0"
NADD = 24 # threads slamming the first-time lazy-init store (write @540) at once
NAUD = 8 # threads spinning audit events (should_audit read @239)
barrier = threading.Barrier(NADD + NAUD)
def _hook(*a):
return None
def adder():
barrier.wait()
for _ in range(200):
sys.addaudithook(_hook) # write interp->audit_hooks (first time) @540
def auditor():
barrier.wait()
for _ in range(200000):
sys.audit("fusil.tsan.test") # should_audit read of interp->audit_hooks @239
ts = [threading.Thread(target=adder) for _ in range(NADD)]
ts += [threading.Thread(target=auditor) for _ in range(NAUD)]
for t in ts: t.start()
for t in ts: t.join()
print("done, no crash")
The fix is incoming.
Linked PRs
- gh-154462
- gh-154477
- gh-154478
- gh-154494
- gh-154554
- gh-154769
- gh-154774
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
評価
この issue はまだ評価されていません。