Autosave creates assertion then segfault
Description
pcbnew throws an assertion when executing autosave on a standalone board. If continued, the autosave routine will segfault.
(gdb) bt
#0 raise (sig=<optimized out>) at ../sysdeps/unix/sysv/linux/raise.c:50
#1 0x00007ffff7907c7d in wxGUIAppTraits::ShowAssertDialog(wxString const&) (this=<optimized out>, msg=...) at ../src/gtk/utilsgtk.cpp:345
#2 0x00007ffff73cf297 in () at /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
#3 0x00007ffff73d1d58 in wxAppConsoleBase::OnAssertFailure(wchar_t const*, int, wchar_t const*, wchar_t const*, wchar_t const*) ()
at /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
#4 0x00007ffff78d5be0 in wxApp::OnAssertFailure(wchar_t const*, int, wchar_t const*, wchar_t const*, wchar_t const*)
(this=0x555555938d10, file=<optimized out>, line=<optimized out>, func=<optimized out>, cond=<optimized out>, msg=<optimized out>)
at ../src/gtk/app.cpp:540
#5 0x00007ffff73d202b in () at /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
#6 0x00007ffff73cd2d5 in wxOnAssert(char const*, int, char const*, char const*, char const*) () at /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
#7 0x00007ffff174a338 in BOARD::SynchronizeNetsAndNetClasses() (this=0x55555a750c80) at ../../pcbnew/class_board.cpp:1340
#8 0x00007ffff139f7e8 in PCB_EDIT_FRAME::SavePcbFile(wxString const&, bool) (this=0x5555587d1070, aFileName=..., addToHistory=false)
at ../../pcbnew/files.cpp:721
#9 0x00007ffff13a1437 in PCB_EDIT_FRAME::doAutoSave() (this=0x5555587d1070) at ../../pcbnew/files.cpp:889
#10 0x00007ffff1ace343 in EDA_BASE_FRAME::onAutoSaveTimer(wxTimerEvent&) (this=0x5555587d1070, aEvent=...) at ../../common/eda_base_frame.cpp:263
#11 0x00007ffff7549241 in wxEvtHandler::ProcessEventIfMatchesId(wxEventTableEntryBase const&, wxEvtHandler*, wxEvent&) ()
at /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
#12 0x00007ffff75495ba in wxEvtHandler::SearchDynamicEventTable(wxEvent&) () at /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
#13 0x00007ffff7549650 in wxEvtHandler::TryHereOnly(wxEvent&) () at /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
#14 0x00007ffff7549703 in wxEvtHandler::ProcessEventLocally(wxEvent&) () at /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
#15 0x00007ffff75497a1 in wxEvtHandler::ProcessEvent(wxEvent&) () at /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
#16 0x00007ffff1acde0d in EDA_BASE_FRAME::ProcessEvent(wxEvent&) (this=0x5555587d1070, aEvent=...) at ../../common/eda_base_frame.cpp:218
#17 0x00007ffff7549537 in wxEvtHandler::SafelyProcessEvent(wxEvent&) () at /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
#18 0x00007ffff74acfc0 in wxTimerImpl::SendEvent() () at /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
#19 0x00007ffff7902272 in wxTimerImpl::Notify() (this=0x555558879c40) at ../include/wx/private/timer.h:47
#20 timeout_callback(gpointer) (data=0x555558879c40) at ../src/gtk/timer.cpp:38
#21 0x00007ffff6237054 in () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#22 0x00007ffff62364de in g_main_context_dispatch () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#23 0x00007ffff6236890 in () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#24 0x00007ffff6236b63 in g_main_loop_run () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#25 0x00007ffff683fe85 in gtk_main () at /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#26 0x00007ffff78f0955 in wxGUIEventLoop::DoRun() (this=0x555558838990) at ../src/gtk/evtloop.cpp:65
#27 0x00007ffff740897d in wxEventLoopBase::Run() () at /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
#28 0x00007ffff73d19a6 in wxAppConsoleBase::MainLoop() () at /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
#29 0x0000555555620907 in APP_SINGLE_TOP::OnRun() (this=0x555555938d10) at ../../common/single_top.cpp:209
#30 0x00007ffff7459a19 in wxEntry(int&, wchar_t**) () at /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
#31 0x000055555561bf7b in main(int, char**) (argc=1, argv=0x7fffffffe148) at ../../common/single_top.cpp:283
Steps to reproduce
- Start pcbnew in standalone mode and open PIC Programmer demo
- Make a change to the board and wait for autosave
KiCad Version
Application: Pcbnew
Version: (5.99.0-2138-gf3f17401d), debug build
Libraries:
wxWidgets 3.0.5
libcurl/7.68.0 OpenSSL/1.1.1g zlib/1.2.11 brotli/1.0.7 libidn2/2.3.0 libpsl/0.21.0 (+libidn2/2.3.0) libssh2/1.8.0 nghttp2/1.41.0 librtmp/2.3
Platform: Linux 5.7.0-1-amd64 x86_64, 64 bit, Little endian, wxGTK
Build Info:
Build date: Jul 4 2020 06:34:19
wxWidgets: 3.0.5 (wchar_t,wx containers,compatible with 2.8) GTK+ 3.24
Boost: 1.71.0
OCC: 7.3.0
Curl: 7.68.0
Compiler: GCC 9.3.0 with C++ ABI 1013
Build settings:
KICAD_SCRIPTING=OFF
KICAD_SCRIPTING_MODULES=OFF
KICAD_SCRIPTING_PYTHON3=OFF
KICAD_SCRIPTING_WXPYTHON=OFF
KICAD_SCRIPTING_WXPYTHON_PHOENIX=OFF
KICAD_SCRIPTING_ACTION_MENU=OFF
BUILD_GITHUB_PLUGIN=ON
KICAD_USE_OCC=ON
KICAD_SPICE=ON
KICAD_STDLIB_DEBUG=ON
KICAD_SANITIZE=OFF