Skip to content

Data race in func_set_code #145272

@ngoldbaum

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions