Various data races in subinterpreter tests under TSAN
未關閉
還沒有人認領這個 Issue。
interpreter-core
topic-subinterpreters
type-bug
- 主要語言
- Python
- 星號
- 77.2k
- 分支
- 36k
- PR 合併指標
- PR 指標待擷取
描述
Bug report
Thread sanitizer reports a number of data races when running subinterpreter tests
InterpreterPoolMixin (test_concurrent_futures)
-
run_eval_code_obj: see https://github.com/python/cpython/issues/128130 -
posixmodule_execmodifies globalswaitid_result_descandstat_result_desc -
_PyBuiltins_AddExceptions: modifies globalsPyExc_EnvironmentError, etc. https://github.com/python/cpython/blob/49bd47d5f14993d37b97aa2bbf257f5df16b96a9/Objects/exceptions.c#L4354-L4355 -
_PyInterpreterState_FinalizeAllocatedBlocks: modifies _PyRuntime variable _PyInterpreterState_FinalizeAllocatedBlocks -
_globals_fini+clear_interpreter: data race on_globals.module_count(the read inclear_interpreterhappens outside of a lock) -
init_static_exctypes: modifies globals_PyExc_InterpreterError, etc. -
_structmodule_exec: data race reported onptr->unpack = native->unpack
I think for now it would make sense to skip the InterpreterPoolMixin tests when running with TSAN.
test__interpchannels
-
find_name_in_mroand_waiting_release: I don't understand this one, but it happens duringtest_send_recv_different_interpreters_and_threads
test__interpreters and test_interpreters
-
type_ready_set_new: https://github.com/python/cpython/blob/7b2e01bb555359913939d7ff168363f1760d3f8e/Objects/typeobject.c#L8509 -
type_ready: (see https://github.com/python/cpython/issues/129817) - File descriptor race in
test_api.LowLevelTests.test_is_runningandtest_running:close()concurrent withread()on the same file descriptor. -
managed_static_type_state_initintest.test_interpreters.test_stress.StressTests.test_create_many_threaded: data race on the non-atomic read ofinterp_count. - pegen
memo_statisticsmutex is currently only used in free threading build (seen in test_create_many_threaded) - version tags on static types:
NEXT_GLOBAL_VERSION_TAG,type->tp_versions_used, andtp->tp_version_tagmodifications are not thread-safe (seen in test_create_many_threaded)
test_capi.test_misc.assign_version_tag
- race on
NEXT_GLOBAL_VERSION_TAGinassign_version_tag(see above)
Linked PRs
- gh-129826
- gh-129829
- gh-135794
- gh-136266
- gh-143446
- gh-143530
貢獻指南
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
研究方向
先從 test_concurrent_futures、test__interpchannels 和 test__interpreters 中尚未檢查的競態開始,然後閱讀 Modules/posixmodule.c、Objects/typeobject.c、Modules/_interpchannelsmodule.c 和 Modules/_struct.c 中連結的位置。在 TSAN 下執行受影響的子直譯器測試;當每個已回報的競態都有經過審查的解決方案或已記錄的處置,並且已考量連結的 PR 時,即視為完成。
由索引模型根據 Issue 內容生成。
評估
- 技術堆疊
- c, python
- 領域
- backend, testing-qa
- Issue 類型
- 缺陷
- 難度
- 5/5
- 預估耗時
- 一週以上
- 活躍度
- 停滯
- 描述清晰度
- 需要釐清
- 新手友好度
- 20/100