From 4a392cf3fb4b9c0bd0d354449bd864ed44cce766 Mon Sep 17 00:00:00 2001 From: Brett Simmers Date: Mon, 6 May 2024 16:46:00 -0700 Subject: [PATCH 1/5] Replace TSAN suppressions with more specific rules --- Tools/tsan/suppressions_free_threading.txt | 75 ++++++++++++++-------- 1 file changed, 48 insertions(+), 27 deletions(-) diff --git a/Tools/tsan/suppressions_free_threading.txt b/Tools/tsan/suppressions_free_threading.txt index 74dbf4bb1cb688..42dc82dddcfb1a 100644 --- a/Tools/tsan/suppressions_free_threading.txt +++ b/Tools/tsan/suppressions_free_threading.txt @@ -11,34 +11,55 @@ race:set_allocator_unlocked ## Free-threaded suppressions -race:_add_to_weak_set -race:_in_weak_set -race:_mi_heap_delayed_free_partial -race:_PyEval_EvalFrameDefault -race:_PyImport_AcquireLock -race:_PyImport_ReleaseLock -race:_PyInterpreterState_SetNotRunningMain -race:_PyInterpreterState_IsRunningMain -race:_PyObject_GC_IS_SHARED -race:_PyObject_GC_SET_SHARED -race:_PyObject_GC_TRACK +race_top:_add_to_weak_set +race_top:_in_weak_set +race_top:_mi_heap_delayed_free_partial +race_top:_PyEval_EvalFrameDefault +race_top:_PyImport_AcquireLock +race_top:_PyImport_ReleaseLock +race_top:_PyInterpreterState_SetNotRunningMain +race_top:_PyInterpreterState_IsRunningMain +race_top:_PyObject_GC_IS_SHARED +race_top:_PyObject_GC_SET_SHARED +race_top:_PyObject_GC_TRACK # https://gist.github.com/mpage/0a24eb2dd458441ededb498e9b0e5de8 -race:_PyParkingLot_Park -race:_PyType_HasFeature -race:assign_version_tag -race:gc_restore_tid -race:initialize_new_array -race:insertdict -race:lookup_tp_dict -race:mi_heap_visit_pages -race:PyMember_GetOne -race:PyMember_SetOne -race:new_reference -race:set_contains_key -race:set_inheritable -race:start_the_world -race:tstate_set_detached -race:unicode_hash +race_top:_PyParkingLot_Park +race_top:_PyType_HasFeature +race_top:assign_version_tag +race_top:gc_restore_tid +race_top:initialize_new_array +race_top:insertdict +race_top:lookup_tp_dict +race_top:mi_heap_visit_pages +race_top:PyMember_GetOne +race_top:PyMember_SetOne +race_top:new_reference +race_top:set_contains_key +race_top:set_inheritable +race_top:start_the_world +race_top:tstate_set_detached +race_top:unicode_hash +race_top:Py_SET_TYPE +race_top:_PyDict_CheckConsistency +race_top:_PyImport_AcquireLock +race_top:_Py_atomic_compare_exchange_int +race_top:_Py_atomic_load_uintptr_relaxed +race_top:_Py_dict_lookup_threadsafe +race_top:__tsan_memset +race_top:_imp_release_lock +race_top:_multiprocessing_SemLock_acquire_impl +race_top:builtin_compile_impl +race_top:count_next +race_top:dictiter_new +race_top:dictresize +race_top:insert_to_emptydict +race_top:insertdict +race_top:list_get_item_ref +race_top:make_pending_calls +race_top:recv +race_top:set_add_entry +race_top:should_intern_string +race_top:worklist_pop # https://gist.github.com/mpage/6962e8870606cfc960e159b407a0cb40 thread:pthread_create From 3663587ebd4806cb03f4567d7bbc60acbcb09273 Mon Sep 17 00:00:00 2001 From: Brett Simmers Date: Tue, 7 May 2024 09:53:14 -0700 Subject: [PATCH 2/5] Two more suppressions --- Tools/tsan/suppressions_free_threading.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Tools/tsan/suppressions_free_threading.txt b/Tools/tsan/suppressions_free_threading.txt index 42dc82dddcfb1a..d1729911d65224 100644 --- a/Tools/tsan/suppressions_free_threading.txt +++ b/Tools/tsan/suppressions_free_threading.txt @@ -60,6 +60,8 @@ race_top:recv race_top:set_add_entry race_top:should_intern_string race_top:worklist_pop +race_top:_PyEval_IsGILEnabled +race_top:llist_insert_tail # https://gist.github.com/mpage/6962e8870606cfc960e159b407a0cb40 thread:pthread_create From 9f121792de6927c5ff85d45b8bb322c34063b570 Mon Sep 17 00:00:00 2001 From: Brett Simmers Date: Tue, 7 May 2024 10:09:00 -0700 Subject: [PATCH 3/5] One more --- Tools/tsan/suppressions_free_threading.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/Tools/tsan/suppressions_free_threading.txt b/Tools/tsan/suppressions_free_threading.txt index d1729911d65224..0ef628aef40722 100644 --- a/Tools/tsan/suppressions_free_threading.txt +++ b/Tools/tsan/suppressions_free_threading.txt @@ -62,6 +62,7 @@ race_top:should_intern_string race_top:worklist_pop race_top:_PyEval_IsGILEnabled race_top:llist_insert_tail +race_top:_Py_slot_tp_getattr_hook # https://gist.github.com/mpage/6962e8870606cfc960e159b407a0cb40 thread:pthread_create From 74d09a7227e48c104778af3197c8d87a0a9154e3 Mon Sep 17 00:00:00 2001 From: Brett Simmers Date: Tue, 7 May 2024 16:28:25 -0700 Subject: [PATCH 4/5] Even more, with gists for the non-top races --- Tools/tsan/suppressions_free_threading.txt | 39 +++++++++++++++++++--- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/Tools/tsan/suppressions_free_threading.txt b/Tools/tsan/suppressions_free_threading.txt index 0ef628aef40722..789eadd51284ab 100644 --- a/Tools/tsan/suppressions_free_threading.txt +++ b/Tools/tsan/suppressions_free_threading.txt @@ -11,6 +11,20 @@ race:set_allocator_unlocked ## Free-threaded suppressions + +# These entries are for warnings that trigger in a library function, as called +# by a CPython function. + +# https://gist.github.com/swtaarrs/9d41251e603fa6dedd604191a6da820d +race:park_detached_threads +# https://gist.github.com/swtaarrs/8e0e365e1d9cecece3269a2fb2f2b8b8 +race:sock_recv_impl +# https://gist.github.com/swtaarrs/08dfe7883b4c975c31ecb39388987a67 +race:free_threadstate + + +# These warnings trigger directly in a CPython function. + race_top:_add_to_weak_set race_top:_in_weak_set race_top:_mi_heap_delayed_free_partial @@ -42,10 +56,7 @@ race_top:unicode_hash race_top:Py_SET_TYPE race_top:_PyDict_CheckConsistency race_top:_PyImport_AcquireLock -race_top:_Py_atomic_compare_exchange_int -race_top:_Py_atomic_load_uintptr_relaxed race_top:_Py_dict_lookup_threadsafe -race_top:__tsan_memset race_top:_imp_release_lock race_top:_multiprocessing_SemLock_acquire_impl race_top:builtin_compile_impl @@ -56,13 +67,33 @@ race_top:insert_to_emptydict race_top:insertdict race_top:list_get_item_ref race_top:make_pending_calls -race_top:recv race_top:set_add_entry race_top:should_intern_string race_top:worklist_pop race_top:_PyEval_IsGILEnabled race_top:llist_insert_tail race_top:_Py_slot_tp_getattr_hook +race_top:add_threadstate +race_top:dump_traceback +race_top:fatal_error +race_top:mi_page_decode_padding +race_top:_multiprocessing_SemLock_release_impl +race_top:_PyFrame_GetCode +race_top:_PyFrame_Initialize +race_top:PyInterpreterState_ThreadHead +race_top:_PyObject_TryGetInstanceAttribute +race_top:_Py_qsbr_unregister +race_top:_Py_qsbr_poll +race_top:PyThreadState_Next +race_top:Py_TYPE +race_top:PyUnstable_InterpreterFrame_GetLine +race_top:sock_close +race_top:tstate_delete_common +race_top:tstate_is_freed +race_top:type_modified_unlocked +race_top:update_refs +race_top:write_thread_id +race_top:PyThreadState_Clear # https://gist.github.com/mpage/6962e8870606cfc960e159b407a0cb40 thread:pthread_create From 1c67a79958ff2b60e34aa92ca8494fc6f0a8742e Mon Sep 17 00:00:00 2001 From: Brett Simmers Date: Wed, 8 May 2024 13:27:21 -0700 Subject: [PATCH 5/5] Add _PyParkingLot_Park --- Tools/tsan/suppressions_free_threading.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Tools/tsan/suppressions_free_threading.txt b/Tools/tsan/suppressions_free_threading.txt index 789eadd51284ab..b91b19c2103142 100644 --- a/Tools/tsan/suppressions_free_threading.txt +++ b/Tools/tsan/suppressions_free_threading.txt @@ -21,6 +21,8 @@ race:park_detached_threads race:sock_recv_impl # https://gist.github.com/swtaarrs/08dfe7883b4c975c31ecb39388987a67 race:free_threadstate +# https://gist.github.com/swtaarrs/cd6aec2006e0c1b561b68d65e9f1a872 +race:_PyParkingLot_Park # These warnings trigger directly in a CPython function.