When I try to open schematics, PCB, footprint editor, kicad crashes with information about python runtime. Reproducible: Always Steps to Reproduce: 1. Launch kicad 2. Try to open any schematics or PCB Actual Results: Fatal Python error: _Py_CheckRecursiveCall: Unrecoverable stack overflow (used -406047 kB) while calling a Python object Python runtime state: initialized Current thread 0x00007f2e05523040 [kicad] (most recent call first): <no Python frame> [1]+ Aborted (core dumped) kicad Expected Results: Just works withot crashes Additional Information: kicad-9.0.4-1.fc44.x86_64 python3-3.14.0~rc2-1.fc44.x86_64
I've started a discussion with the upstream KiCad developers. My suspicion is that it is related to Rawhide having switched to python 3.14, while older Fedoras still use python 3.13.
kicad-9.0.5-1.fc44 - the same result. flatpack org.kicad.KiCad - works.
I've done some experiments to build KiCad without python scripting, but while that lets eeschema and the symbol editor run, we still get a crash on pcbnew and the footprint editor. I talked with the lead developers, who tell me it would be a big job to disentangle python from KiCad. And of course there would be a loss of functionality. For now, I think the flatpak, which embeds an older python, is the only practical option. If other environments also force an upgrade to python 3.14 with similar crashing behavior then that will motivate a different solution. I'll leave this bug open as a reminder, but we may have to close it as "can't fix" at some point.
This should in theory be fixable. It could very well be a bug in Python. The problem is narrowing down the problem to make a simple reproducer that the Python folks would look at. Either that or find that the bug is in some other component. :-)
We don't seem to have a stack trace recorded, so: (gdb) bt full #0 __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at pthread_kill.c:44 tid = <optimized out> ret = 0 pd = <optimized out> old_mask = {__val = {140050293587970}} ret = <optimized out> #1 0x00007f60eff8c493 in __pthread_kill_internal (threadid=<optimized out>, signo=6) at pthread_kill.c:89 #2 0x00007f60eff3218e in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26 ret = <optimized out> #3 0x00007f60eff196d0 in __GI_abort () at abort.c:77 act = {__sigaction_handler = {sa_handler = 0x7f60ef385ef0 <_PyRuntime+51952>, sa_sigaction = 0x7f60ef385ef0 <_PyRuntime+51952>}, sa_mask = {__val = {4, 0, 1626620595453486592, 140054306764480, 140054307300584, 140052375925792, 140054320226652, 206158430256, 140052375925816, 140052375925616, 1626620595453486592, 140052375925664, 140054302672507, 94574515853664, 140054307075688, 140054307036912}}, sa_flags = -1244241, sa_restorer = 0x7f607c1df430} #4 0x00007f60eef1afa8 in fatal_error_exit (status=-1) at /usr/src/debug/python3.14-3.14.0~rc3-1.fc43.x86_64/Python/pylifecycle.c:3155 #5 fatal_error (fd=<optimized out>, header=header@entry=1, prefix=prefix@entry=0x7f60ef232e40 <__func__.4> "_Py_CheckRecursiveCall", msg=msg@entry=0x7f607c1df440 "Unrecoverable stack overflow (used -1244241 kB) while calling a Python object", status=status@entry=-1) at /usr/src/debug/python3.14-3.14.0~rc3-1.fc43.x86_64/Python/pylifecycle.c:3301 runtime = <optimized out> tstate = <optimized out> interp = <optimized out> tss_tstate = <optimized out> has_tstate_and_gil = <optimized out> reentrant = 1 #6 0x00007f60eef1b31a in _Py_FatalErrorFunc (func=func@entry=0x7f60ef232e40 <__func__.4> "_Py_CheckRecursiveCall", msg=msg@entry=0x7f607c1df440 "Unrecoverable stack overflow (used -1244241 kB) while calling a Python object") at /usr/src/debug/python3.14-3.14.0~rc3-1.fc43.x86_64/Python/pylifecycle.c:3387 #7 0x00007f60eee235bc in _Py_CheckRecursiveCall (tstate=0x7f60ef3c64e8 <_PyRuntime+315624>, where=<optimized out>) at /usr/src/debug/python3.14-3.14.0~rc3-1.fc43.x86_64/Python/ceval.c:491 kbytes_used = <optimized out> buffer = "Unrecoverable stack overflow (used -1244241 kB) while calling a Python object\000\000" _tstate = 0x7f60ef3c64e8 <_PyRuntime+315624> here_addr = 140052375925936 #8 0x00007f60eee3511e in _Py_EnterRecursiveCallTstate (tstate=<optimized out>, where=0x7f60ef16b918 " while calling a Python object") at /usr/src/debug/python3.14-3.14.0~rc3-1.fc43.x86_64/Include/internal/pycore_ceval.h:216 #9 method_enter_call (tstate=<optimized out>, func=0x7f60dc5f5da0) at /usr/src/debug/python3.14-3.14.0~rc3-1.fc43.x86_64/Objects/descrobject.c:300 #10 method_vectorcall_NOARGS (func=<optimized out>, args=<optimized out>, nargsf=<optimized out>, kwnames=<optimized out>) at /usr/src/debug/python3.14-3.14.0~rc3-1.fc43.x86_64/Objects/descrobject.c:444 tstate = <optimized out> nargs = <optimized out> meth = <optimized out> result = <optimized out> #11 0x00007f60eefed330 in _PyObject_VectorcallTstate (tstate=0x7f60ef3c64e8 <_PyRuntime+315624>, callable=0x7f60dc5f5da0, args=0x7f607c1df560, nargsf=<optimized out>, kwnames=0x0) at /usr/src/debug/python3.14-3.14.0~rc3-1.fc43.x86_64/Include/internal/pycore_call.h:169 func = <optimized out> res = <optimized out> nargs = <optimized out> #12 PyObject_VectorcallMethod (name=<optimized out>, args=0x7f607c1df560, nargsf=<optimized out>, kwnames=0x0) at /usr/src/debug/python3.14-3.14.0~rc3-1.fc43.x86_64/Objects/call.c:856 tstate = 0x7f60ef3c64e8 <_PyRuntime+315624> callable = 0x7f60dc5f5da0 unbound = <optimized out> result = <optimized out> #13 0x00007f60ef0835c2 in PyObject_CallMethodNoArgs (self=<optimized out>, name=<optimized out>) at /usr/src/debug/python3.14-3.14.0~rc3-1.fc43.x86_64/Include/cpython/abstract.h:65 #14 _PyFile_Flush (file=<optimized out>) at /usr/src/debug/python3.14-3.14.0~rc3-1.fc43.x86_64/Objects/fileobject.c:542 tmp = <optimized out> #15 0x00007f60ef0a204f in flush_std_files () at /usr/src/debug/python3.14-3.14.0~rc3-1.fc43.x86_64/Python/pylifecycle.c:1820 file = 0x7f60dc517060 status = <optimized out> #16 0x00007f60eef1b2aa in fatal_error (fd=2, header=header@entry=1, prefix=prefix@entry=0x7f60ef232e40 <__func__.4> "_Py_CheckRecursiveCall", msg=msg@entry=0x7f607c1df630 "Unrecoverable stack overflow (used -1244241 kB) while calling a Python object", status=status@entry=-1) at /usr/src/debug/python3.14-3.14.0~rc3-1.fc43.x86_64/Python/pylifecycle.c:3364 runtime = <optimized out> tstate = <optimized out> interp = 0x7f60ef38f668 <_PyRuntime+90728> tss_tstate = 0x7f60ef3c64e8 <_PyRuntime+315624> has_tstate_and_gil = 1 reentrant = 1 #17 0x00007f60eef1b31a in _Py_FatalErrorFunc (func=func@entry=0x7f60ef232e40 <__func__.4> "_Py_CheckRecursiveCall", msg=msg@entry=0x7f607c1df630 "Unrecoverable stack overflow (used -1244241 kB) while calling a Python object") at /usr/src/debug/python3.14-3.14.0~rc3-1.fc43.x86_64/Python/pylifecycle.c:3387 #18 0x00007f60eee235bc in _Py_CheckRecursiveCall (tstate=0x7f60ef3c64e8 <_PyRuntime+315624>, where=<optimized out>) at /usr/src/debug/python3.14-3.14.0~rc3-1.fc43.x86_64/Python/ceval.c:491 kbytes_used = <optimized out> --Type <RET> for more, q to quit, c to continue without paging--/rh buffer = "Unrecoverable stack overflow (used -1244241 kB) while calling a Python object\000\000" _tstate = 0x7f60ef3c64e8 <_PyRuntime+315624> here_addr = 140052375926432 #19 0x00007f60eee2781a in _Py_EnterRecursiveCallTstate (tstate=<optimized out>, where=0x7f60ef16b918 " while calling a Python object") at /usr/src/debug/python3.14-3.14.0~rc3-1.fc43.x86_64/Include/internal/pycore_ceval.h:216 #20 cfunction_enter_call (tstate=<optimized out>, func=0x7f60dc5a7ab0) at /usr/src/debug/python3.14-3.14.0~rc3-1.fc43.x86_64/Objects/methodobject.c:428 #21 cfunction_vectorcall_FASTCALL_KEYWORDS (func=0x7f60dc5a7ab0, args=0x7f607c1df720, nargsf=5, kwnames=0x0) at /usr/src/debug/python3.14-3.14.0~rc3-1.fc43.x86_64/Objects/methodobject.c:461 tstate = <optimized out> nargs = 5 meth = <optimized out> result = <optimized out> #22 0x00007f60eef537c4 in _PyObject_VectorcallTstate (tstate=0x7f60ef3c64e8 <_PyRuntime+315624>, callable=0x7f60dc5a7ab0, args=0x7f607c1df720, nargsf=1, kwnames=0x0) at /usr/src/debug/python3.14-3.14.0~rc3-1.fc43.x86_64/Include/internal/pycore_call.h:169 func = <optimized out> res = <optimized out> nargs = <optimized out> #23 _PyObject_CallFunctionVa (tstate=0x7f60ef3c64e8 <_PyRuntime+315624>, callable=0x7f60dc5a7ab0, format=<optimized out>, va=0x7f607c1df700) at /usr/src/debug/python3.14-3.14.0~rc3-1.fc43.x86_64/Objects/call.c:552 small_stack = {0x7f60dc4bb130, 0x7f60dc4a0cc0, 0x7f60dc4a0cc0, 0x7f60dc5e1a80, 0x7f60ef37cb78 <_PyRuntime+14200>} stack = 0x7f607c1df720 nargs = 5 i = <optimized out> result = <optimized out> #24 PyObject_CallFunction (callable=0x7f60dc5a7ab0, format=<optimized out>) at /usr/src/debug/python3.14-3.14.0~rc3-1.fc43.x86_64/Objects/call.c:574 va = {{gp_offset = 16, fp_offset = 48, overflow_arg_area = 0x7f607c1df840, reg_save_area = 0x7f607c1df750}} result = <optimized out> tstate = 0x7f60ef3c64e8 <_PyRuntime+315624> #25 0x00007f60eefea0ef in PyImport_Import (module_name=0x7f60dc4bb130) at /usr/src/debug/python3.14-3.14.0~rc3-1.fc43.x86_64/Python/import.c:4000 tstate = 0x7f60ef3c64e8 <_PyRuntime+315624> globals = 0x7f60dc4a0cc0 import = <optimized out> builtins = 0x7f60dc5a7a10 r = 0x0 from_list = 0x7f60dc5e1a80 err = <optimized out> #26 0x00007f60ef082460 in PyImport_ImportModule (name=<optimized out>) at /usr/src/debug/python3.14-3.14.0~rc3-1.fc43.x86_64/Python/import.c:3423 pname = 0x7f60dc4bb130 result = <optimized out> #27 0x00007f60f18e1c2c in pybind11::module_::import (name=0x7f60f1c2b2ca "__main__") at /usr/src/debug/kicad-9.0.5-1.fc43.x86_64/thirdparty/pybind11/include/pybind11/pybind11.h:1201 obj = <optimized out> #28 pybind11::globals () at /usr/src/debug/kicad-9.0.5-1.fc43.x86_64/thirdparty/pybind11/include/pybind11/pybind11.h:1290 p = 0x0 #29 SCRIPTING::IsModuleLoaded (aModule="_pcbnew") at /usr/src/debug/kicad-9.0.5-1.fc43.x86_64/scripting/python_scripting.cpp:216 lock = {gil_state = PyGILState_LOCKED} locals = {<pybind11::object> = {<pybind11::handle> = {<pybind11::detail::object_api<pybind11::handle>> = {<pybind11::detail::pyobject_tag> = {<No data fields>}, <No data fields>}, m_ptr = 0x7f60dc4391c0}, <No data fields>}, <No data fields>} #30 0x00007f5f8a2fbbf8 in SCRIPTING_TOOL::Init (this=0x5603d9d261f0) at /usr/src/debug/kicad-9.0.5-1.fc43.x86_64/pcbnew/python/scripting/pcb_scripting_tool.cpp:65 lock = {gil_state = PyGILState_UNLOCKED} pymodule = "_pcbnew" #31 0x00007f5f8a8a81df in TOOL_MANAGER::InitTools (this=0x5603d97aca20) at /usr/src/debug/kicad-9.0.5-1.fc43.x86_64/common/tool/tool_manager.cpp:654 tool = 0x5603d9d261f0 state = 0x5603d9d27c50 it = 0x5603d9d284e0 #32 0x00007f5f89db6c33 in PCB_EDIT_FRAME::setupTools (this=this@entry=0x5603d96f6be0) at /usr/src/debug/kicad-9.0.5-1.fc43.x86_64/pcbnew/pcb_edit_frame.cpp:767 #33 0x00007f5f89db7cb1 in PCB_EDIT_FRAME::PCB_EDIT_FRAME (this=0x5603d96f6be0, aKiway=<optimized out>, aParent=<optimized out>, this=<optimized out>, aKiway=<optimized out>, aParent=<optimized out>) at /usr/src/debug/kicad-9.0.5-1.fc43.x86_64/pcbnew/pcb_edit_frame.cpp:272 canvas = <optimized out> auiFlags = <optimized out> icon = {<wxBitmap> = {<wxBitmapBase> = {<wxGDIObject> = {<wxObject> = {_vptr.wxObject = 0x5603d7250170 <vtable for wxIcon+16>, static ms_classInfo = {m_className = 0x7f60f27dea08 L"wxObject", m_objectSize = 16, m_objectConstructor = 0x0, m_baseInfo1 = 0x0, m_baseInfo2 = 0x0, static sm_first = 0x7f5ff01e3100 <wxFileSystemInternetModule::ms_classInfo>, m_next = 0x7f60f284a8c0 <wxProcessEvent::ms_classInfo>, static sm_classTable = 0x5603d7dea980}, m_refData = 0x5603d9c74d00}, static ms_classInfo = {m_className = 0x7f60f3042548 L"wxGDIObject", m_objectSize = 16, m_objectConstructor = 0x0, m_baseInfo1 = 0x7f60f284ab00 <wxObject::ms_classInfo>, m_baseInfo2 = 0x0, static sm_first = 0x7f5ff01e3100 <wxFileSystemInternetModule::ms_classInfo>, m_next = 0x7f60f31e9800 <wxGraphicsRenderer::ms_classInfo>}}, <wxBitmapHelpers> = {<No data fields>}, static sm_handlers = {<wxObjectList> = {<wxListBase> = {_vptr.wxListBase = 0x7f60f282d480 <vtable for wxList+16>, m_count = 0, m_destroy = false, m_nodeFirst = 0x0, m_nodeLast = 0x0, m_keyType = wxKEY_NONE}, <No data fields>}, <No data fields>}, static ms_classInfo = {m_className = 0x7f60f3038c90 L"wxBitmapBase", m_objectSize = 16, m_objectConstructor = 0x0, m_baseInfo1 = 0x7f60f31e81e0 <wxGDIObject::ms_classInfo>, m_baseInfo2 = 0x0, static sm_first = 0x7f5ff01e3100 <wxFileSystemInternetModule::ms_classInfo>, m_next = 0x7f60f31e81a0 <wxBitmapButton::ms_classInfo>}}, static ms_classInfo = {m_className = 0x7f60f3037a90 L"wxBitmap", m_objectSize = 16, m_objectConstructor = 0x7f60f2aadea0 <wxBitmap::wxCreateObject()>, m_baseInfo1 = 0x7f60f31e81e0 <wxGDIObject::ms_classInfo>, m_baseInfo2 = 0x0, static sm_first = 0x7f5ff01e3100 <wxFileSystemInternetModule::ms_classInfo>, m_next = 0x7f60f31df4a0 <wxMask::ms_classInfo>}}, static ms_classInfo = {m_className = 0x7f60f3059230 L"wxIcon", m_objectSize = 16, m_objectConstructor = 0x7f60f2ab1aa0 <wxIcon::wxCreateObject()>, m_baseInfo1 = 0x7f60f31df460 <wxBitmap::ms_classInfo>, m_baseInfo2 = 0x0, static sm_first = 0x7f5ff01e3100 <wxFileSystemInternetModule::ms_classInfo>, m_next = 0x7f60f31df520 <wxPalette::ms_classInfo>}} icon_bundle = {<wxGDIObject> = {<wxObject> = {_vptr.wxObject = 0x7f60f31476a8 <vtable for wxIconBundle+16>, static ms_classInfo = {m_className = 0x7f60f27dea08 L"wxObject", m_objectSize = 16, m_objectConstructor = 0x0, m_baseInfo1 = 0x0, m_baseInfo2 = 0x0, static sm_first = 0x7f5ff01e3100 <wxFileSystemInternetModule::ms_classInfo>, m_next = 0x7f60f284a8c0 <wxProcessEvent::ms_classInfo>, static sm_classTable = 0x5603d7dea980}, m_refData = 0x5603d9c8b900}, static ms_classInfo = {m_className = 0x7f60f3042548 L"wxGDIObject", m_objectSize = 16, m_objectConstructor = 0x0, m_baseInfo1 = 0x7f60f284ab00 <wxObject::ms_classInfo>, m_baseInfo2 = 0x0, static sm_first = 0x7f5ff01e3100 <wxFileSystemInternetModule::ms_classInfo>, m_next = 0x7f60f31e9800 <wxGraphicsRenderer::ms_classInfo>}}, static ms_classInfo = {m_className = 0x7f60f3053e98 L"wxIconBundle", m_objectSize = 16, m_objectConstructor = 0x7f60f2c22cc0 <wxIconBundle::wxCreateObject()>, m_baseInfo1 = 0x7f60f31e81e0 <wxGDIObject::ms_classInfo>, m_baseInfo2 = 0x0, static sm_first = 0x7f5ff01e3100 <wxFileSystemInternetModule::ms_classInfo>, m_next = 0x7f60f31e9ce0 <wxANIHandler::ms_classInfo>}} aui_cfg = {appearance_panel_tab = <optimized out>, appearance_expand_layer_display = <optimized out>, appearance_expand_net_display = <optimized out>, right_panel_width = <optimized out>, properties_panel_width = <optimized out>, net_inspector_width = <optimized out>, properties_splitter = <optimized out>, search_panel_height = <optimized out>, search_panel_width = <optimized out>, search_panel_dock_direction = <optimized out>, show_layer_manager = <optimized out>, show_properties = <optimized out>, show_search = <optimized out>, show_net_inspector = <optimized out>} strK2S = {static npos = 18446744073709551615, m_impl = L"", m_convertedToChar = {m_str = 0x0, m_len = 0}} appK2S = {m_volume = {static npos = 18446744073709551615, m_impl = L"\000\000\000\000\001\000\000\000\000", m_convertedToChar = {m_str = 0x0, m_len = 0}}, m_dirs = {m_compareFunction = 0x0, m_nSize = 3608, m_nCount = 140054321179328, m_pItems = 0x0, m_autoSort = 192}, m_name = {static npos = 18446744073709551615, m_impl = <error reading variable: Cannot create a lazy string with address 0x0, and a non-zero length.>, m_convertedToChar = {m_str = 0x7f60f0102ac0 <main_arena> "", m_len = 3616}}, m_ext = {static npos = 18446744073709551615, m_impl = <error: Cannot access memory at address 0x580>, m_convertedToChar = {m_str = 0x0, m_len = 94574494665408}}, m_relative = false, m_hasExt = false, m_dontFollowLinks = false} canvas = <optimized out> icon = {<wxBitmap> = {<wxBitmapBase> = {<wxGDIObject> = {<wxObject> = {_vptr.wxObject = <optimized out>, static ms_classInfo = {m_className = 0x7f60f27dea08 L"wxObject", m_objectSize = 16, m_objectConstructor = 0x0, m_baseInfo1 = 0x0, m_baseInfo2 = 0x0, static sm_first = 0x7f5ff01e3100 <wxFileSystemInternetModule::ms_classInfo>, m_next = 0x7f60f284a8c0 <wxProcessEvent::ms_classInfo>, static sm_classTable = 0x5603d7dea980}, m_refData = <optimized out>}, static ms_classInfo = {m_className = 0x7f60f3042548 L"wxGDIObject", m_objectSize = 16, m_objectConstructor = 0x0, m_baseInfo1 = 0x7f60f284ab00 <wxObject::ms_classInfo>, m_baseInfo2 = 0x0, static sm_first = 0x7f5ff01e3100 <wxFileSystemInternetModule::ms_classInfo>, m_next = 0x7f60f31e9800 <wxGraphicsRenderer::ms_classInfo>}}, <wxBitmapHelpers> = {<No data fields>}, static sm_handlers = {<wxObjectList> = {<wxListBase> = {_vptr.wxListBase = 0x7f60f282d480 <vtable for wxList+16>, m_count = 0, m_destroy = false, m_nodeFirst = 0x0, m_nodeLast = 0x0, m_keyType = wxKEY_NONE}, <No data fields>}, <No data fields>}, static ms_classInfo = {m_className = 0x7f60f3038c90 L"wxBitmapBase", m_objectSize = 16, m_objectConstructor = 0x0, m_baseInfo1 = 0x7f60f31e81e0 <wxGDIObject::ms_classInfo>, m_baseInfo2 = 0x0, static sm_first = 0x7f5ff01e3100 <wxFileSystemInternetModule::ms_classInfo>, m_next = 0x7f60f31e81a0 <wxBitmapButton::ms_classInfo>}}, static ms_classInfo = {m_className = 0x7f60f3037a90 L"wxBitmap", m_objectSize = 16, m_objectConstructor = 0x7f60f2aadea0 <wxBitmap::wxCreateObject()>, m_baseInfo1 = 0x7f60f31e81e0 <wxGDIObject::ms_classInfo>, m_baseInfo2 = 0x0, static sm_first = 0x7f5ff01e3100 <wxFileSystemInternetModule::ms_classInfo>, m_next = 0x7f60f31df4a0 <wxMask::ms_classInfo>}}, static ms_classInfo = {m_className = 0x7f60f3059230 L"wxIcon", m_objectSize = 16, m_objectConstructor = 0x7f60f2ab1aa0 <wxIcon::wxCreateObject()>, m_baseInfo1 = 0x7f60f31df460 <wxBitmap::ms_classInfo>, m_baseInfo2 = 0x0, static sm_first = 0x7f5ff01e3100 <wxFileSystemInternetModule::ms_classInfo>, m_next = 0x7f60f31df520 <wxPalette::ms_classInfo>}} icon_bundle = {<wxGDIObject> = {<wxObject> = {_vptr.wxObject = <optimized out>, static ms_classInfo = {m_className = 0x7f60f27dea08 L"wxObject", m_objectSize = 16, m_objectConstructor = 0x0, m_baseInfo1 = 0x0, m_baseInfo2 = 0x0, static sm_first = 0x7f5ff01e3100 <wxFileSystemInternetModule::ms_classInfo>, m_next = 0x7f60f284a8c0 <wxProcessEvent::ms_classInfo>, static sm_classTable = 0x5603d7dea980}, m_refData = <optimized out>}, static ms_classInfo = {m_className = 0x7f60f3042548 L"wxGDIObject", m_objectSize = 16, m_objectConstructor = 0x0, m_baseInfo1 = 0x7f60f284ab00 <wxObject::ms_classInfo>, m_baseInfo2 = 0x0, static sm_first = 0x7f5ff01e3100 <wxFileSystemInternetModule::ms_classInfo>, m_next = 0x7f60f31e9800 <wxGraphicsRenderer::ms_classInfo>}}, static ms_classInfo = {m_className = 0x7f60f3053e98 L"wxIconBundle", m_objectSize = 16, m_objectConstructor = 0x7f60f2c22cc0 <wxIconBundle::wxCreateObject()>, m_baseInfo1 = 0x7f60f31e81e0 <wxGDIObject::ms_classInfo>, m_baseInfo2 = 0x0, static sm_first = 0x7f5ff01e3100 <wxFileSystemInternetModule::ms_classInfo>, m_next = 0x7f60f31e9ce0 <wxANIHandler::ms_classInfo>}} aui_cfg = {appearance_panel_tab = <optimized out>, appearance_expand_layer_display = <optimized out>, appearance_expand_net_display = <optimized out>, right_panel_width = <optimized out>, properties_panel_width = <optimized out>, net_inspector_width = <optimized out>, properties_splitter = <optimized out>, search_panel_height = <optimized out>, search_panel_width = <optimized out>, search_panel_dock_direction = <optimized out>, show_layer_manager = <optimized out>, show_properties = <optimized out>, show_search = <optimized out>, show_net_inspector = <optimized out>} auiFlags = <optimized out> strK2S = Python Exception <class 'gdb.error'>: value has been optimized out {static npos = 18446744073709551615, m_impl = , m_convertedToChar = {m_str = <optimized out>, m_len = <optimized out>}} appK2S = Python Exception <class 'gdb.error'>: value has been optimized out Python Exception <class 'gdb.error'>: value has been optimized out Python Exception <class 'gdb.error'>: value has been optimized out {m_volume = {static npos = 18446744073709551615, m_impl = , m_convertedToChar = {m_str = <optimized out>, m_len = <optimized out>}}, m_dirs = {m_compareFunction = <optimized out>, m_nSize = <optimized out>, m_nCount = <optimized out>, m_pItems = <optimized out>, m_autoSort = <optimized out>}, m_name = {static npos = 18446744073709551615, m_impl = , m_convertedToChar = {m_str = <optimized out>, m_len = <optimized out>}}, m_ext = {static npos = 18446744073709551615, m_impl = , m_convertedToChar = {m_str = <optimized out>, m_len = <optimized out>}}, m_relative = <optimized out>, m_hasExt = <optimized out>, m_dontFollowLinks = <optimized out>} layersManager = <optimized out> propertiesPanel = <optimized out> searchPane = <optimized out> searchPane = <optimized out> #34 0x00007f5f89912880 in PCB::IFACE::CreateKiWindow (this=0x7f5f8b4d6a80 <_ZN3PCBL6kifaceE.lto_priv.0>, aParent=0x0, aClassId=<optimized out>, aKiway=0x5603d728cac0 <Kiway>, aCtlBits=<optimized out>) at /usr/src/debug/kicad-9.0.5-1.fc43.x86_64/pcbnew/pcbnew.cpp:99 frame = <optimized out> #35 0x00007f60f18817b8 in KIWAY::Player (this=0x5603d728cac0 <Kiway>, aFrameType=<optimized out>, doCreate=<optimized out>, aParent=0x0) at /usr/src/debug/kicad-9.0.5-1.fc43.x86_64/common/kiway.cpp:447 face_type = <optimized out> kiface = <optimized out> frame = <optimized out> #36 0x00005603d6f34fe0 in KICAD_MANAGER_CONTROL::ShowPlayer (this=0x5603d8c59c10, aEvent=<optimized out>) at /usr/src/debug/kicad-9.0.5-1.fc43.x86_64/kicad/tools/kicad_manager_control.cpp:803 playerType = FRAME_PCB_EDITOR --Type <RET> for more, q to quit, c to continue without paging-- player = <optimized out> guard = {m_flag = 0x5603d8c59c58} #37 0x00005603d6fbb28c in std::function<int(TOOL_EVENT const&)>::operator() (this=0x5603d987d118, __args#0=<optimized out>) at /usr/include/c++/15/bits/std_function.h:593 #38 COROUTINE<int, TOOL_EVENT const&>::callerStub (aData=<optimized out>) at /usr/src/debug/kicad-9.0.5-1.fc43.x86_64/include/tool/coroutine.h:513 args = <optimized out> cor = 0x5603d987d100 #39 0x00005603d71082a1 in make_fcontext () #40 0x0000000000000000 in ??? ()
The upstream devs tell me that their long-term plan is to remove python from the KiCad builds in favor of an IPC interface. Fedora is not the only platform with python-related issues. There should be development builds containing that removal available prior to the Fedora 44 branch point in Feb 2026. So my plan is to incorporate a dev build into rawhide as soon as it becomes available. Until then, folks should use a flatpak - there is one provided by the KiCad team, and I think there is one provided within Fedora itself, although I haven't tried that one.
Cross-linking https://bugzilla.redhat.com/show_bug.cgi?id=2401327
(In reply to Steven A. Falco from comment #6) > The upstream devs tell me that their long-term plan is to remove python from > the KiCad builds in favor of an IPC interface. Fedora is not the only > platform with python-related issues. > > There should be development builds containing that removal available prior > to the Fedora 44 branch point in Feb 2026. So my plan is to incorporate a > dev build into rawhide as soon as it becomes available. Until then, folks > should use a flatpak - there is one provided by the KiCad team, and I think > there is one provided within Fedora itself, although I haven't tried that > one. That's rather grim. Is there any link to upstream discussion about what the problem is? To me it looks like a confusion between threads; I don't think it's really a recursion issue - it looks like it's comparing the current thread pointer with something else entirely - maybe a thread pointer from a different thread?
Indeed it is grim. The discussions so far have been on an internal Zulip thread. Probably the best thing is to open a bug report on the KiCad site, where the discussion can be public. I'll open a bug report there, and provide a link here. Give me a few minutes...
Here is a link to the issue I just filed with the upstream KiCad devs. Folks will likely need a gitlab account to comment on the bug: https://gitlab.com/kicad/code/kicad/-/issues/21890
(In reply to Steven A. Falco from comment #10) > Here is a link to the issue I just filed with the upstream KiCad devs. > Folks will likely need a gitlab account to comment on the bug: > > https://gitlab.com/kicad/code/kicad/-/issues/21890 Thanks I added a comment.
Steven: Is there a way to raise a flag to the Fedora Python maintainers, just so they can see if this is happening on any other packages as well?
I had asked about this on the Fedora development mailing list but I'll again.
Here is a link to the thread on the Fedora devel mailing list: https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/thread/BQDAIVF2KCOVU2EKQEPOOYMX3V5R5DVI/ Here is a link to my latest request for help: https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/message/RZKMV6PDJBBKVR2VMXC6QP3A2O7373KW/
Victor Stinner (from the Python team) has determined what is going wrong. Details here: https://github.com/python/cpython/issues/139653
Thanks for raising that; I've thrown an idea into the ring.
kicad-9.0.6-1.fc44 - the same result ;-(
Yes. Not a surprise. I ran the builds mostly to keep everything consistent. This will take a while to sort out, either by python providing a solution or by removing python from KiCad. There are other projects with the same problem so hopefully that will raise the importance of the problem. I suppose one could set up an F42 VM and run KiCad in that environment as another potential workaround.
Using the flatpak as advised multiple times here is probably the best solution for the time being.
FEDORA-2025-e235793f10 (python3.14-3.14.2-1.fc43 and python3-docs-3.14.2-1.fc43) has been submitted as an update to Fedora 43. https://bodhi.fedoraproject.org/updates/FEDORA-2025-e235793f10
Works for me with python3-3.14.2-1.fc44
I agree. This is now working with the 3.14.2-1 build of python.
FEDORA-2025-e235793f10 (python3.14-3.14.2-1.fc43 and python3-docs-3.14.2-1.fc43) has been pushed to the Fedora 43 stable repository. If problem still persists, please make note of it in this bug report.