Skip to content

Data race in func_set_code #145272

Description

@ngoldbaum

Bug report

Bug description:

According to the Python stack trace from faulthandler, the problem comes from the _lazy_compile decorator in networkx:

https://github.com/networkx/networkx/blob/aaa00dbb0b610f9ce374ea29fd28ca6740acbc00/networkx/utils/decorators.py#L715-L760

I don't have a simple way to reproduce this unfortunately. I hit this running the scikit-image tests using a TSan-instrumented build of scikit-image and all its dependencies, including CPython.

goldbaum at Nathans-MBP in ~/Documents/scikit-image on use_pytest_run_parallel
± TSAN_OPTIONS=halt_on_error=1 spin test --no-build "tests/skimage/graph/test_rag.py::test_rag_merge" -- --parallel-threads=4 -sv --skip-thread-unsafe=true
python3.15(44941,0x1f7caa240) malloc: nano zone abandoned due to inability to reserve vm space.
$ export PYTHONPATH="/Users/goldbaum/Documents/scikit-image/build-install/usr/lib/python3.15t/site-packages"
$ /Users/goldbaum/.pyenv/versions/3.15t-dev-tsan/bin/python3.15 -P -c 'import skimage'
python3.15(44994,0x1f7caa240) malloc: nano zone abandoned due to inability to reserve vm space.
$ /Users/goldbaum/.pyenv/versions/3.15t-dev-tsan/bin/python3.15 -P -m pytest --doctest-plus tests/skimage/graph/test_rag.py::test_rag_merge --parallel-threads=4 -sv --skip-thread-unsafe=true
python3.15(44996,0x1f7caa240) malloc: nano zone abandoned due to inability to reserve vm space.
======================================================================================= test session starts =======================================================================================
platform darwin -- Python 3.15.0a6+, pytest-9.0.2, pluggy-1.6.0 -- /Users/goldbaum/.pyenv/versions/3.15t-dev-tsan/bin/python3.15
cachedir: .pytest_cache
rootdir: /Users/goldbaum/Documents/scikit-image
configfile: pyproject.toml
plugins: pretty-1.3.0, run-parallel-0.8.2, localserver-0.10.0, doctestplus-1.7.1, cov-7.0.0
collected 1 item
Collected 1 items to run in parallel

tests/skimage/graph/test_rag.py::test_rag_merge ==================
WARNING: ThreadSanitizer: data race (pid=44996)
  Read of size 8 at 0x000110d59040 by thread T1:
    #0 func_set_code funcobject.c:667 (libpython3.15t.dylib:arm64+0xdca5c)
    #1 getset_set descrobject.c:250 (libpython3.15t.dylib:arm64+0xa5148)
    #2 _PyObject_GenericSetAttrWithDict object.c:2012 (libpython3.15t.dylib:arm64+0x144274)
    #3 PyObject_GenericSetAttr object.c:2083 (libpython3.15t.dylib:arm64+0x1449dc)
    #4 PyObject_SetAttr object.c:1528 (libpython3.15t.dylib:arm64+0x141858)
    #5 _PyEval_EvalFrameDefault generated_cases.c.h:10903 (libpython3.15t.dylib:arm64+0x29dc70)
    #6 _PyEval_Vector ceval.c:2132 (libpython3.15t.dylib:arm64+0x285e2c)
    #7 _PyFunction_Vectorcall call.c (libpython3.15t.dylib:arm64+0x8ef28)
    #8 _PyObject_VectorcallDictTstate call.c:135 (libpython3.15t.dylib:arm64+0x8db18)
    #9 _PyObject_Call_Prepend call.c:504 (libpython3.15t.dylib:arm64+0x8f52c)
    #10 slot_tp_new typeobject.c:11002 (libpython3.15t.dylib:arm64+0x1a3c74)
    #11 type_call typeobject.c:2460 (libpython3.15t.dylib:arm64+0x1971cc)
    #12 _PyObject_MakeTpCall call.c:242 (libpython3.15t.dylib:arm64+0x8dd70)
    #13 PyObject_Vectorcall call.c:327 (libpython3.15t.dylib:arm64+0x8e978)
    #14 _Py_VectorCallInstrumentation_StackRefSteal ceval.c:769 (libpython3.15t.dylib:arm64+0x286930)
    #15 _PyEval_EvalFrameDefault generated_cases.c.h:1817 (libpython3.15t.dylib:arm64+0x28bb2c)
    #16 _PyEval_Vector ceval.c:2132 (libpython3.15t.dylib:arm64+0x285e2c)
    #17 _PyFunction_Vectorcall call.c (libpython3.15t.dylib:arm64+0x8ef28)
    #18 method_vectorcall classobject.c:74 (libpython3.15t.dylib:arm64+0x931c8)
    #19 context_run context.c:727 (libpython3.15t.dylib:arm64+0x2d1110)
    #20 method_vectorcall_FASTCALL_KEYWORDS descrobject.c:421 (libpython3.15t.dylib:arm64+0xa6014)
    #21 PyObject_Vectorcall call.c:327 (libpython3.15t.dylib:arm64+0x8e8e4)
    #22 _Py_VectorCallInstrumentation_StackRefSteal ceval.c:769 (libpython3.15t.dylib:arm64+0x286930)
    #23 _PyEval_EvalFrameDefault generated_cases.c.h:1817 (libpython3.15t.dylib:arm64+0x28bb2c)
    #24 _PyEval_Vector ceval.c:2132 (libpython3.15t.dylib:arm64+0x285e2c)
    #25 _PyFunction_Vectorcall call.c (libpython3.15t.dylib:arm64+0x8ef28)
    #26 method_vectorcall classobject.c:74 (libpython3.15t.dylib:arm64+0x931c8)
    #27 _PyObject_Call call.c:348 (libpython3.15t.dylib:arm64+0x8eb98)
    #28 PyObject_Call call.c:373 (libpython3.15t.dylib:arm64+0x8ec10)
    #29 thread_run _threadmodule.c:387 (libpython3.15t.dylib:arm64+0x43a2e4)
    #30 pythread_wrapper thread_pthread.h:234 (libpython3.15t.dylib:arm64+0x37a748)

  Previous write of size 8 at 0x000110d59040 by thread T2:
    #0 func_set_code funcobject.c:682 (libpython3.15t.dylib:arm64+0xdcc78)
    #1 getset_set descrobject.c:250 (libpython3.15t.dylib:arm64+0xa5148)
    #2 _PyObject_GenericSetAttrWithDict object.c:2012 (libpython3.15t.dylib:arm64+0x144274)
    #3 PyObject_GenericSetAttr object.c:2083 (libpython3.15t.dylib:arm64+0x1449dc)
    #4 PyObject_SetAttr object.c:1528 (libpython3.15t.dylib:arm64+0x141858)
    #5 _PyEval_EvalFrameDefault generated_cases.c.h:10903 (libpython3.15t.dylib:arm64+0x29dc70)
    #6 _PyEval_Vector ceval.c:2132 (libpython3.15t.dylib:arm64+0x285e2c)
    #7 _PyFunction_Vectorcall call.c (libpython3.15t.dylib:arm64+0x8ef28)
    #8 _PyObject_VectorcallDictTstate call.c:135 (libpython3.15t.dylib:arm64+0x8db18)
    #9 _PyObject_Call_Prepend call.c:504 (libpython3.15t.dylib:arm64+0x8f52c)
    #10 slot_tp_new typeobject.c:11002 (libpython3.15t.dylib:arm64+0x1a3c74)
    #11 type_call typeobject.c:2460 (libpython3.15t.dylib:arm64+0x1971cc)
    #12 _PyObject_MakeTpCall call.c:242 (libpython3.15t.dylib:arm64+0x8dd70)
    #13 PyObject_Vectorcall call.c:327 (libpython3.15t.dylib:arm64+0x8e978)
    #14 _Py_VectorCallInstrumentation_StackRefSteal ceval.c:769 (libpython3.15t.dylib:arm64+0x286930)
    #15 _PyEval_EvalFrameDefault generated_cases.c.h:1817 (libpython3.15t.dylib:arm64+0x28bb2c)
    #16 _PyEval_Vector ceval.c:2132 (libpython3.15t.dylib:arm64+0x285e2c)
    #17 _PyFunction_Vectorcall call.c (libpython3.15t.dylib:arm64+0x8ef28)
    #18 method_vectorcall classobject.c:74 (libpython3.15t.dylib:arm64+0x931c8)
    #19 context_run context.c:727 (libpython3.15t.dylib:arm64+0x2d1110)
    #20 method_vectorcall_FASTCALL_KEYWORDS descrobject.c:421 (libpython3.15t.dylib:arm64+0xa6014)
    #21 PyObject_Vectorcall call.c:327 (libpython3.15t.dylib:arm64+0x8e8e4)
    #22 _Py_VectorCallInstrumentation_StackRefSteal ceval.c:769 (libpython3.15t.dylib:arm64+0x286930)
    #23 _PyEval_EvalFrameDefault generated_cases.c.h:1817 (libpython3.15t.dylib:arm64+0x28bb2c)
    #24 _PyEval_Vector ceval.c:2132 (libpython3.15t.dylib:arm64+0x285e2c)
    #25 _PyFunction_Vectorcall call.c (libpython3.15t.dylib:arm64+0x8ef28)
    #26 method_vectorcall classobject.c:74 (libpython3.15t.dylib:arm64+0x931c8)
    #27 _PyObject_Call call.c:348 (libpython3.15t.dylib:arm64+0x8eb98)
    #28 PyObject_Call call.c:373 (libpython3.15t.dylib:arm64+0x8ec10)
    #29 thread_run _threadmodule.c:387 (libpython3.15t.dylib:arm64+0x43a2e4)
    #30 pythread_wrapper thread_pthread.h:234 (libpython3.15t.dylib:arm64+0x37a748)

  Thread T1 (tid=375271174, running) created by main thread at:
    #0 pthread_create <null> (libclang_rt.tsan_osx_dynamic.dylib:arm64+0x30e28)
    #1 do_start_joinable_thread thread_pthread.h:281 (libpython3.15t.dylib:arm64+0x379964)
    #2 PyThread_start_joinable_thread thread_pthread.h:323 (libpython3.15t.dylib:arm64+0x37979c)
    #3 ThreadHandle_start _threadmodule.c:474 (libpython3.15t.dylib:arm64+0x43a0f0)
    #4 do_start_new_thread _threadmodule.c:1920 (libpython3.15t.dylib:arm64+0x439bbc)
    #5 thread_PyThread_start_joinable_thread _threadmodule.c:2043 (libpython3.15t.dylib:arm64+0x438c24)
    #6 cfunction_call methodobject.c:564 (libpython3.15t.dylib:arm64+0x1359e8)
    #7 _PyObject_MakeTpCall call.c:242 (libpython3.15t.dylib:arm64+0x8dd70)
    #8 PyObject_Vectorcall call.c:327 (libpython3.15t.dylib:arm64+0x8e978)
    #9 _Py_VectorCallInstrumentation_StackRefSteal ceval.c:769 (libpython3.15t.dylib:arm64+0x286930)
    #10 _PyEval_EvalFrameDefault generated_cases.c.h:3193 (libpython3.15t.dylib:arm64+0x28e8ec)
    #11 _PyEval_Vector ceval.c:2132 (libpython3.15t.dylib:arm64+0x285e2c)
    #12 _PyFunction_Vectorcall call.c (libpython3.15t.dylib:arm64+0x8ef28)
    #13 _PyObject_VectorcallDictTstate call.c:146 (libpython3.15t.dylib:arm64+0x8dad0)
    #14 _PyObject_Call_Prepend call.c:504 (libpython3.15t.dylib:arm64+0x8f52c)
    #15 call_method typeobject.c:3088 (libpython3.15t.dylib:arm64+0x1a3dec)
    #16 slot_tp_call typeobject.c:10744 (libpython3.15t.dylib:arm64+0x1a3b6c)
    #17 _PyObject_MakeTpCall call.c:242 (libpython3.15t.dylib:arm64+0x8dd70)
    #18 PyObject_Vectorcall call.c:327 (libpython3.15t.dylib:arm64+0x8e978)
    #19 _Py_VectorCallInstrumentation_StackRefSteal ceval.c:769 (libpython3.15t.dylib:arm64+0x286930)
    #20 _PyEval_EvalFrameDefault generated_cases.c.h:3193 (libpython3.15t.dylib:arm64+0x28e8ec)
    #21 _PyEval_Vector ceval.c:2132 (libpython3.15t.dylib:arm64+0x285e2c)
    #22 _PyFunction_Vectorcall call.c (libpython3.15t.dylib:arm64+0x8ef28)
    #23 _PyObject_VectorcallDictTstate call.c:146 (libpython3.15t.dylib:arm64+0x8dad0)
    #24 _PyObject_Call_Prepend call.c:504 (libpython3.15t.dylib:arm64+0x8f52c)
    #25 call_method typeobject.c:3088 (libpython3.15t.dylib:arm64+0x1a3dec)
    #26 slot_tp_call typeobject.c:10744 (libpython3.15t.dylib:arm64+0x1a3b6c)
    #27 _PyObject_Call call.c:361 (libpython3.15t.dylib:arm64+0x8eb58)
    #28 PyObject_Call call.c:373 (libpython3.15t.dylib:arm64+0x8ec10)
    #29 _PyEval_EvalFrameDefault generated_cases.c.h:2611 (libpython3.15t.dylib:arm64+0x28d4b8)
    #30 _PyEval_Vector ceval.c:2132 (libpython3.15t.dylib:arm64+0x285e2c)
    #31 _PyFunction_Vectorcall call.c (libpython3.15t.dylib:arm64+0x8ef28)
    #32 _PyObject_VectorcallDictTstate call.c:146 (libpython3.15t.dylib:arm64+0x8dad0)
    #33 _PyObject_Call_Prepend call.c:504 (libpython3.15t.dylib:arm64+0x8f52c)
    #34 call_method typeobject.c:3088 (libpython3.15t.dylib:arm64+0x1a3dec)
    #35 slot_tp_call typeobject.c:10744 (libpython3.15t.dylib:arm64+0x1a3b6c)
    #36 _PyObject_MakeTpCall call.c:242 (libpython3.15t.dylib:arm64+0x8dd70)
    #37 PyObject_Vectorcall call.c:327 (libpython3.15t.dylib:arm64+0x8e978)
    #38 _Py_VectorCallInstrumentation_StackRefSteal ceval.c:769 (libpython3.15t.dylib:arm64+0x286930)
    #39 _PyEval_EvalFrameDefault generated_cases.c.h:3193 (libpython3.15t.dylib:arm64+0x28e8ec)
    #40 _PyEval_Vector ceval.c:2132 (libpython3.15t.dylib:arm64+0x285e2c)
    #41 _PyFunction_Vectorcall call.c (libpython3.15t.dylib:arm64+0x8ef28)
    #42 _PyObject_VectorcallDictTstate call.c:146 (libpython3.15t.dylib:arm64+0x8dad0)
    #43 _PyObject_Call_Prepend call.c:504 (libpython3.15t.dylib:arm64+0x8f52c)
    #44 call_method typeobject.c:3088 (libpython3.15t.dylib:arm64+0x1a3dec)
    #45 slot_tp_call typeobject.c:10744 (libpython3.15t.dylib:arm64+0x1a3b6c)
    #46 _PyObject_MakeTpCall call.c:242 (libpython3.15t.dylib:arm64+0x8dd70)
    #47 PyObject_Vectorcall call.c:327 (libpython3.15t.dylib:arm64+0x8e978)
    #48 _Py_VectorCallInstrumentation_StackRefSteal ceval.c:769 (libpython3.15t.dylib:arm64+0x286930)
    #49 _PyEval_EvalFrameDefault generated_cases.c.h:3193 (libpython3.15t.dylib:arm64+0x28e8ec)
    #50 _PyEval_Vector ceval.c:2132 (libpython3.15t.dylib:arm64+0x285e2c)
    #51 _PyFunction_Vectorcall call.c (libpython3.15t.dylib:arm64+0x8ef28)
    #52 _PyObject_VectorcallDictTstate call.c:146 (libpython3.15t.dylib:arm64+0x8dad0)
    #53 _PyObject_Call_Prepend call.c:504 (libpython3.15t.dylib:arm64+0x8f52c)
    #54 call_method typeobject.c:3088 (libpython3.15t.dylib:arm64+0x1a3dec)
    #55 slot_tp_call typeobject.c:10744 (libpython3.15t.dylib:arm64+0x1a3b6c)
    #56 _PyObject_MakeTpCall call.c:242 (libpython3.15t.dylib:arm64+0x8dd70)
    #57 PyObject_Vectorcall call.c:327 (libpython3.15t.dylib:arm64+0x8e978)
    #58 _Py_VectorCallInstrumentation_StackRefSteal ceval.c:769 (libpython3.15t.dylib:arm64+0x286930)
    #59 _PyEval_EvalFrameDefault generated_cases.c.h:3193 (libpython3.15t.dylib:arm64+0x28e8ec)
    #60 PyEval_EvalCode ceval.c:680 (libpython3.15t.dylib:arm64+0x285a04)
    #61 builtin_exec bltinmodule.c.h:674 (libpython3.15t.dylib:arm64+0x27f654)
    #62 cfunction_vectorcall_FASTCALL_KEYWORDS methodobject.c:465 (libpython3.15t.dylib:arm64+0x134da0)
    #63 PyObject_Vectorcall call.c:327 (libpython3.15t.dylib:arm64+0x8e8e4)
    #64 _Py_VectorCallInstrumentation_StackRefSteal ceval.c:769 (libpython3.15t.dylib:arm64+0x286930)
    #65 _PyEval_EvalFrameDefault generated_cases.c.h:1817 (libpython3.15t.dylib:arm64+0x28bb2c)
    #66 _PyEval_Vector ceval.c:2132 (libpython3.15t.dylib:arm64+0x285e2c)
    #67 _PyFunction_Vectorcall call.c (libpython3.15t.dylib:arm64+0x8ef28)
    #68 _PyObject_Call call.c:348 (libpython3.15t.dylib:arm64+0x8eb98)
    #69 PyObject_Call call.c:373 (libpython3.15t.dylib:arm64+0x8ec10)
    #70 pymain_run_module main.c:353 (libpython3.15t.dylib:arm64+0x3925c0)
    #71 Py_RunMain main.c:772 (libpython3.15t.dylib:arm64+0x391bb4)
    #72 pymain_main main.c:802 (libpython3.15t.dylib:arm64+0x392364)
    #73 Py_BytesMain main.c:826 (libpython3.15t.dylib:arm64+0x392464)
    #74 main <null> (python3.15:arm64+0x100000788)

  Thread T2 (tid=375271175, running) created by main thread at:
    #0 pthread_create <null> (libclang_rt.tsan_osx_dynamic.dylib:arm64+0x30e28)
    #1 do_start_joinable_thread thread_pthread.h:281 (libpython3.15t.dylib:arm64+0x379964)
    #2 PyThread_start_joinable_thread thread_pthread.h:323 (libpython3.15t.dylib:arm64+0x37979c)
    #3 ThreadHandle_start _threadmodule.c:474 (libpython3.15t.dylib:arm64+0x43a0f0)
    #4 do_start_new_thread _threadmodule.c:1920 (libpython3.15t.dylib:arm64+0x439bbc)
    #5 thread_PyThread_start_joinable_thread _threadmodule.c:2043 (libpython3.15t.dylib:arm64+0x438c24)
    #6 cfunction_call methodobject.c:564 (libpython3.15t.dylib:arm64+0x1359e8)
    #7 _PyObject_MakeTpCall call.c:242 (libpython3.15t.dylib:arm64+0x8dd70)
    #8 PyObject_Vectorcall call.c:327 (libpython3.15t.dylib:arm64+0x8e978)
    #9 _Py_VectorCall_StackRefSteal ceval.c:727 (libpython3.15t.dylib:arm64+0x2861f8)
    #10 _PyEval_EvalFrameDefault generated_cases.c.h:3395 (libpython3.15t.dylib:arm64+0x28efec)
    #11 _PyEval_Vector ceval.c:2132 (libpython3.15t.dylib:arm64+0x285e2c)
    #12 _PyFunction_Vectorcall call.c (libpython3.15t.dylib:arm64+0x8ef28)
    #13 _PyObject_VectorcallDictTstate call.c:146 (libpython3.15t.dylib:arm64+0x8dad0)
    #14 _PyObject_Call_Prepend call.c:504 (libpython3.15t.dylib:arm64+0x8f52c)
    #15 call_method typeobject.c:3088 (libpython3.15t.dylib:arm64+0x1a3dec)
    #16 slot_tp_call typeobject.c:10744 (libpython3.15t.dylib:arm64+0x1a3b6c)
    #17 _PyObject_MakeTpCall call.c:242 (libpython3.15t.dylib:arm64+0x8dd70)
    #18 PyObject_Vectorcall call.c:327 (libpython3.15t.dylib:arm64+0x8e978)
    #19 _Py_VectorCallInstrumentation_StackRefSteal ceval.c:769 (libpython3.15t.dylib:arm64+0x286930)
    #20 _PyEval_EvalFrameDefault generated_cases.c.h:3193 (libpython3.15t.dylib:arm64+0x28e8ec)
    #21 _PyEval_Vector ceval.c:2132 (libpython3.15t.dylib:arm64+0x285e2c)
    #22 _PyFunction_Vectorcall call.c (libpython3.15t.dylib:arm64+0x8ef28)
    #23 _PyObject_VectorcallDictTstate call.c:146 (libpython3.15t.dylib:arm64+0x8dad0)
    #24 _PyObject_Call_Prepend call.c:504 (libpython3.15t.dylib:arm64+0x8f52c)
    #25 call_method typeobject.c:3088 (libpython3.15t.dylib:arm64+0x1a3dec)
    #26 slot_tp_call typeobject.c:10744 (libpython3.15t.dylib:arm64+0x1a3b6c)
    #27 _PyObject_Call call.c:361 (libpython3.15t.dylib:arm64+0x8eb58)
    #28 PyObject_Call call.c:373 (libpython3.15t.dylib:arm64+0x8ec10)
    #29 _PyEval_EvalFrameDefault generated_cases.c.h:2611 (libpython3.15t.dylib:arm64+0x28d4b8)
    #30 _PyEval_Vector ceval.c:2132 (libpython3.15t.dylib:arm64+0x285e2c)
    #31 _PyFunction_Vectorcall call.c (libpython3.15t.dylib:arm64+0x8ef28)
    #32 _PyObject_VectorcallDictTstate call.c:146 (libpython3.15t.dylib:arm64+0x8dad0)
    #33 _PyObject_Call_Prepend call.c:504 (libpython3.15t.dylib:arm64+0x8f52c)
    #34 call_method typeobject.c:3088 (libpython3.15t.dylib:arm64+0x1a3dec)
    #35 slot_tp_call typeobject.c:10744 (libpython3.15t.dylib:arm64+0x1a3b6c)
    #36 _PyObject_MakeTpCall call.c:242 (libpython3.15t.dylib:arm64+0x8dd70)
    #37 PyObject_Vectorcall call.c:327 (libpython3.15t.dylib:arm64+0x8e978)
    #38 _Py_VectorCallInstrumentation_StackRefSteal ceval.c:769 (libpython3.15t.dylib:arm64+0x286930)
    #39 _PyEval_EvalFrameDefault generated_cases.c.h:3193 (libpython3.15t.dylib:arm64+0x28e8ec)
    #40 _PyEval_Vector ceval.c:2132 (libpython3.15t.dylib:arm64+0x285e2c)
    #41 _PyFunction_Vectorcall call.c (libpython3.15t.dylib:arm64+0x8ef28)
    #42 _PyObject_VectorcallDictTstate call.c:146 (libpython3.15t.dylib:arm64+0x8dad0)
    #43 _PyObject_Call_Prepend call.c:504 (libpython3.15t.dylib:arm64+0x8f52c)
    #44 call_method typeobject.c:3088 (libpython3.15t.dylib:arm64+0x1a3dec)
    #45 slot_tp_call typeobject.c:10744 (libpython3.15t.dylib:arm64+0x1a3b6c)
    #46 _PyObject_MakeTpCall call.c:242 (libpython3.15t.dylib:arm64+0x8dd70)
    #47 PyObject_Vectorcall call.c:327 (libpython3.15t.dylib:arm64+0x8e978)
    #48 _Py_VectorCallInstrumentation_StackRefSteal ceval.c:769 (libpython3.15t.dylib:arm64+0x286930)
    #49 _PyEval_EvalFrameDefault generated_cases.c.h:3193 (libpython3.15t.dylib:arm64+0x28e8ec)
    #50 _PyEval_Vector ceval.c:2132 (libpython3.15t.dylib:arm64+0x285e2c)
    #51 _PyFunction_Vectorcall call.c (libpython3.15t.dylib:arm64+0x8ef28)
    #52 _PyObject_VectorcallDictTstate call.c:146 (libpython3.15t.dylib:arm64+0x8dad0)
    #53 _PyObject_Call_Prepend call.c:504 (libpython3.15t.dylib:arm64+0x8f52c)
    #54 call_method typeobject.c:3088 (libpython3.15t.dylib:arm64+0x1a3dec)
    #55 slot_tp_call typeobject.c:10744 (libpython3.15t.dylib:arm64+0x1a3b6c)
    #56 _PyObject_MakeTpCall call.c:242 (libpython3.15t.dylib:arm64+0x8dd70)
    #57 PyObject_Vectorcall call.c:327 (libpython3.15t.dylib:arm64+0x8e978)
    #58 _Py_VectorCallInstrumentation_StackRefSteal ceval.c:769 (libpython3.15t.dylib:arm64+0x286930)
    #59 _PyEval_EvalFrameDefault generated_cases.c.h:3193 (libpython3.15t.dylib:arm64+0x28e8ec)
    #60 PyEval_EvalCode ceval.c:680 (libpython3.15t.dylib:arm64+0x285a04)
    #61 builtin_exec bltinmodule.c.h:674 (libpython3.15t.dylib:arm64+0x27f654)
    #62 cfunction_vectorcall_FASTCALL_KEYWORDS methodobject.c:465 (libpython3.15t.dylib:arm64+0x134da0)
    #63 PyObject_Vectorcall call.c:327 (libpython3.15t.dylib:arm64+0x8e8e4)
    #64 _Py_VectorCallInstrumentation_StackRefSteal ceval.c:769 (libpython3.15t.dylib:arm64+0x286930)
    #65 _PyEval_EvalFrameDefault generated_cases.c.h:1817 (libpython3.15t.dylib:arm64+0x28bb2c)
    #66 _PyEval_Vector ceval.c:2132 (libpython3.15t.dylib:arm64+0x285e2c)
    #67 _PyFunction_Vectorcall call.c (libpython3.15t.dylib:arm64+0x8ef28)
    #68 _PyObject_Call call.c:348 (libpython3.15t.dylib:arm64+0x8eb98)
    #69 PyObject_Call call.c:373 (libpython3.15t.dylib:arm64+0x8ec10)
    #70 pymain_run_module main.c:353 (libpython3.15t.dylib:arm64+0x3925c0)
    #71 Py_RunMain main.c:772 (libpython3.15t.dylib:arm64+0x391bb4)
    #72 pymain_main main.c:802 (libpython3.15t.dylib:arm64+0x392364)
    #73 Py_BytesMain main.c:826 (libpython3.15t.dylib:arm64+0x392464)
    #74 main <null> (python3.15:arm64+0x100000788)

SUMMARY: ThreadSanitizer: data race funcobject.c:667 in func_set_code
==================
Fatal Python error: Aborted

<Cannot show all threads while the GIL is disabled>
Stack (most recent call first):
  File "/Users/goldbaum/.pyenv/versions/3.15t-dev-tsan/lib/python3.15t/site-packages/networkx/utils/decorators.py", line 757 in _lazy_compile
  File "/Users/goldbaum/.pyenv/versions/3.15t-dev-tsan/lib/python3.15t/site-packages/networkx/utils/decorators.py", line 784 in func
  File "/Users/goldbaum/Documents/scikit-image/tests/skimage/graph/test_rag.py", line 23 in test_rag_merge
  File "/Users/goldbaum/.pyenv/versions/3.15t-dev-tsan/lib/python3.15t/site-packages/pytest_run_parallel/plugin.py", line 80 in closure
  File "/Users/goldbaum/.pyenv/versions/3.15t-dev-tsan/lib/python3.15t/threading.py", line 1017 in run
  File "/Users/goldbaum/.pyenv/versions/3.15t-dev-tsan/lib/python3.15t/threading.py", line 1075 in _bootstrap_inner
  File "/Users/goldbaum/.pyenv/versions/3.15t-dev-tsan/lib/python3.15t/threading.py", line 1037 in _bootstrap

Current thread's C stack trace (most recent call first):
  Binary file "/Users/goldbaum/.pyenv/versions/3.15t-dev-tsan/lib/libpython3.15t.dylib", at _Py_DumpStack+0x54 [0x103e3e0a4]
  Binary file "/Users/goldbaum/.pyenv/versions/3.15t-dev-tsan/lib/libpython3.15t.dylib", at faulthandler_fatal_error+0x330 [0x103e68ab4]
  Binary file "/opt/homebrew/Cellar/llvm/21.1.7/lib/clang/21/lib/darwin/libclang_rt.tsan_osx_dynamic.dylib", at _ZN6__tsanL21CallUserSignalHandlerEPNS_11ThreadStateEbbiPN11__sanitizer23__sanitizer_siginfo_padEPv+0x104 [0x1043a6538]
  Binary file "/opt/homebrew/Cellar/llvm/21.1.7/lib/clang/21/lib/darwin/libclang_rt.tsan_osx_dynamic.dylib", at _Z10sighandleriPN11__sanitizer23__sanitizer_siginfo_padEPv+0x1c0 [0x1043a69f4]
  Binary file "/usr/lib/system/libsystem_platform.dylib", at _sigtramp+0x38 [0x189d4d6a4]
  Binary file "/usr/lib/system/libsystem_pthread.dylib", at pthread_kill+0x128 [0x189d13848]
  Binary file "/opt/homebrew/Cellar/llvm/21.1.7/lib/clang/21/lib/darwin/libclang_rt.tsan_osx_dynamic.dylib", at wrap_pthread_kill+0x158 [0x1043a70e8]
  Binary file "/usr/lib/system/libsystem_c.dylib", at abort+0x7c [0x189c1c9e4]
  Binary file "/opt/homebrew/Cellar/llvm/21.1.7/lib/clang/21/lib/darwin/libclang_rt.tsan_osx_dynamic.dylib", at _ZN11__sanitizer6AtexitEPFvvE+0x0 [0x104388784]
  Binary file "/opt/homebrew/Cellar/llvm/21.1.7/lib/clang/21/lib/darwin/libclang_rt.tsan_osx_dynamic.dylib", at _ZN11__sanitizer3DieEv+0x68 [0x104387ca4]
  Binary file "/opt/homebrew/Cellar/llvm/21.1.7/lib/clang/21/lib/darwin/libclang_rt.tsan_osx_dynamic.dylib", at _ZN6__tsan12OutputReportEPNS_11ThreadStateERKNS_12ScopedReportE+0x410 [0x1043ee438]
  Binary file "/opt/homebrew/Cellar/llvm/21.1.7/lib/clang/21/lib/darwin/libclang_rt.tsan_osx_dynamic.dylib", at _ZN6__tsan10ReportRaceEPNS_11ThreadStateEPNS_9RawShadowENS_6ShadowES4_m+0xb84 [0x1043ef224]
  Binary file "/Users/goldbaum/.pyenv/versions/3.15t-dev-tsan/lib/libpython3.15t.dylib", at func_set_code+0xf8 [0x103b9ca60]
  Binary file "/Users/goldbaum/.pyenv/versions/3.15t-dev-tsan/lib/libpython3.15t.dylib", at getset_set+0x90 [0x103b6514c]
  Binary file "/Users/goldbaum/.pyenv/versions/3.15t-dev-tsan/lib/libpython3.15t.dylib", at _PyObject_GenericSetAttrWithDict+0x20c [0x103c04278]
  Binary file "/Users/goldbaum/.pyenv/versions/3.15t-dev-tsan/lib/libpython3.15t.dylib", at PyObject_GenericSetAttr+0x3c [0x103c049e0]
  Binary file "/Users/goldbaum/.pyenv/versions/3.15t-dev-tsan/lib/libpython3.15t.dylib", at PyObject_SetAttr+0x1c8 [0x103c0185c]
  Binary file "/Users/goldbaum/.pyenv/versions/3.15t-dev-tsan/lib/libpython3.15t.dylib", at _PyEval_EvalFrameDefault+0x158ac [0x103d5dc74]
  Binary file "/Users/goldbaum/.pyenv/versions/3.15t-dev-tsan/lib/libpython3.15t.dylib", at _PyEval_Vector+0x3c0 [0x103d45e30]
  Binary file "/Users/goldbaum/.pyenv/versions/3.15t-dev-tsan/lib/libpython3.15t.dylib", at _PyFunction_Vectorcall+0x94 [0x103b4ef2c]
  Binary file "/Users/goldbaum/.pyenv/versions/3.15t-dev-tsan/lib/libpython3.15t.dylib", at _PyObject_VectorcallDictTstate+0x108 [0x103b4db1c]
  Binary file "/Users/goldbaum/.pyenv/versions/3.15t-dev-tsan/lib/libpython3.15t.dylib", at _PyObject_Call_Prepend+0xb4 [0x103b4f530]
  Binary file "/Users/goldbaum/.pyenv/versions/3.15t-dev-tsan/lib/libpython3.15t.dylib", at slot_tp_new+0xec [0x103c63c78]
  Binary file "/Users/goldbaum/.pyenv/versions/3.15t-dev-tsan/lib/libpython3.15t.dylib", at type_call+0x80 [0x103c571d0]
  Binary file "/Users/goldbaum/.pyenv/versions/3.15t-dev-tsan/lib/libpython3.15t.dylib", at _PyObject_MakeTpCall+0x1a4 [0x103b4dd74]
  Binary file "/Users/goldbaum/.pyenv/versions/3.15t-dev-tsan/lib/libpython3.15t.dylib", at PyObject_Vectorcall+0x130 [0x103b4e97c]
  Binary file "/Users/goldbaum/.pyenv/versions/3.15t-dev-tsan/lib/libpython3.15t.dylib", at _Py_VectorCallInstrumentation_StackRefSteal+0x220 [0x103d46934]
  Binary file "/Users/goldbaum/.pyenv/versions/3.15t-dev-tsan/lib/libpython3.15t.dylib", at _PyEval_EvalFrameDefault+0x3768 [0x103d4bb30]
  Binary file "/Users/goldbaum/.pyenv/versions/3.15t-dev-tsan/lib/libpython3.15t.dylib", at _PyEval_Vector+0x3c0 [0x103d45e30]
  Binary file "/Users/goldbaum/.pyenv/versions/3.15t-dev-tsan/lib/libpython3.15t.dylib", at _PyFunction_Vectorcall+0x94 [0x103b4ef2c]
  Binary file "/Users/goldbaum/.pyenv/versions/3.15t-dev-tsan/lib/libpython3.15t.dylib", at method_vectorcall+0x1b8 [0x103b531cc]
  Binary file "/Users/goldbaum/.pyenv/versions/3.15t-dev-tsan/lib/libpython3.15t.dylib", at context_run+0xc4 [0x103d91114]

CPython versions tested on:

CPython main branch

Operating systems tested on:

macOS

Linked PRs

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions