Memory leak: Worksheet elements in View framework
Description
There is a small memory leak in the view system that looks to be of the worksheet items.
=================================================================
==170094==ERROR: LeakSanitizer: detected memory leaks
Direct leak of 8200 byte(s) in 41 object(s) allocated from:
#0 0x58c417 in operator new(unsigned long) (master/build/debug/kicad/kicad+0x58c417)
#1 0x7f77b412ac61 in WS_DATA_ITEM_TEXT::SyncDrawItems(WS_DRAW_ITEM_LIST*, KIGFX::VIEW*) master/build/debug/../../common/page_layout/ws_data_item.cpp:601:16
#2 0x7f77b4147028 in WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList(PAGE_INFO const&, TITLE_BLOCK const&) master/build/debug/../../common/page_layout/ws_draw_item.cpp:472:17
#3 0x7f77b3d4c56a in KIGFX::WS_PROXY_VIEW_ITEM::ViewDraw(int, KIGFX::VIEW*) const master/build/debug/../../common/page_layout/ws_proxy_view_item.cpp:98:14
#4 0x7f77b3f971b2 in KIGFX::VIEW::draw(KIGFX::VIEW_ITEM*, int, bool) master/build/debug/../../common/view/view.cpp:1050:20
#5 0x7f77b3fd4cc7 in KIGFX::VIEW::drawItem::operator()(KIGFX::VIEW_ITEM*) master/build/debug/../../common/view/view.cpp:981:19
#6 0x7f77b3fd4607 in bool RTree<KIGFX::VIEW_ITEM*, int, 2, double, 8, 4>::Search<KIGFX::VIEW::drawItem>(RTree<KIGFX::VIEW_ITEM*, int, 2, double, 8, 4>::Node*, RTree<KIGFX::VIEW_ITEM*, int, 2, double, 8, 4>::Rect*, KIGFX::VIEW::drawItem&, int&) master/build/debug/../../thirdparty/rtree/geometry/rtree.h:568:26
#7 0x7f77b3fd41a9 in int RTree<KIGFX::VIEW_ITEM*, int, 2, double, 8, 4>::Search<KIGFX::VIEW::drawItem>(int const*, int const*, KIGFX::VIEW::drawItem&) master/build/debug/../../thirdparty/rtree/geometry/rtree.h:177:9
#8 0x7f77b3fa4e49 in void KIGFX::VIEW_RTREE::Query<KIGFX::VIEW::drawItem>(BOX2<VECTOR2<int> > const&, KIGFX::VIEW::drawItem&) master/build/debug/../../include/view/view_rtree.h:98:26
#9 0x7f77b3f96692 in KIGFX::VIEW::redrawRect(BOX2<VECTOR2<int> > const&) master/build/debug/../../common/view/view.cpp:1020:23
#10 0x7f77b3f984b9 in KIGFX::VIEW::Redraw() master/build/debug/../../common/view/view.cpp:1164:5
#11 0x7f77b4187abd in EDA_DRAW_PANEL_GAL::onPaint(wxPaintEvent&) master/build/debug/../../common/draw_panel_gal.cpp:200:21
#12 0x7f77b35bc95a in SCH_DRAW_PANEL::onPaint(wxPaintEvent&) master/build/debug/../../eeschema/sch_draw_panel.cpp:210:25
#13 0x7f77cf7d5fbd in wxEvtHandler::ProcessEventIfMatchesId(wxEventTableEntryBase const&, wxEvtHandler*, wxEvent&) (/lib64/libwx_baseu-3.0.so.0+0x222fbd)
Direct leak of 2400 byte(s) in 30 object(s) allocated from:
#0 0x58c417 in operator new(unsigned long) (master/build/debug/kicad/kicad+0x58c417)
#1 0x7f77b41226f8 in WS_DATA_ITEM::SyncDrawItems(WS_DRAW_ITEM_LIST*, KIGFX::VIEW*) master/build/debug/../../common/page_layout/ws_data_item.cpp:108:20
#2 0x7f77b4147028 in WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList(PAGE_INFO const&, TITLE_BLOCK const&) master/build/debug/../../common/page_layout/ws_draw_item.cpp:472:17
#3 0x7f77b3d4c56a in KIGFX::WS_PROXY_VIEW_ITEM::ViewDraw(int, KIGFX::VIEW*) const master/build/debug/../../common/page_layout/ws_proxy_view_item.cpp:98:14
#4 0x7f77b3f971b2 in KIGFX::VIEW::draw(KIGFX::VIEW_ITEM*, int, bool) master/build/debug/../../common/view/view.cpp:1050:20
#5 0x7f77b3fd4cc7 in KIGFX::VIEW::drawItem::operator()(KIGFX::VIEW_ITEM*) master/build/debug/../../common/view/view.cpp:981:19
#6 0x7f77b3fd4607 in bool RTree<KIGFX::VIEW_ITEM*, int, 2, double, 8, 4>::Search<KIGFX::VIEW::drawItem>(RTree<KIGFX::VIEW_ITEM*, int, 2, double, 8, 4>::Node*, RTree<KIGFX::VIEW_ITEM*, int, 2, double, 8, 4>::Rect*, KIGFX::VIEW::drawItem&, int&) master/build/debug/../../thirdparty/rtree/geometry/rtree.h:568:26
#7 0x7f77b3fd41a9 in int RTree<KIGFX::VIEW_ITEM*, int, 2, double, 8, 4>::Search<KIGFX::VIEW::drawItem>(int const*, int const*, KIGFX::VIEW::drawItem&) master/build/debug/../../thirdparty/rtree/geometry/rtree.h:177:9
#8 0x7f77b3fa4e49 in void KIGFX::VIEW_RTREE::Query<KIGFX::VIEW::drawItem>(BOX2<VECTOR2<int> > const&, KIGFX::VIEW::drawItem&) master/build/debug/../../include/view/view_rtree.h:98:26
#9 0x7f77b3f96692 in KIGFX::VIEW::redrawRect(BOX2<VECTOR2<int> > const&) master/build/debug/../../common/view/view.cpp:1020:23
#10 0x7f77b3f984b9 in KIGFX::VIEW::Redraw() master/build/debug/../../common/view/view.cpp:1164:5
#11 0x7f77b4187abd in EDA_DRAW_PANEL_GAL::onPaint(wxPaintEvent&) master/build/debug/../../common/draw_panel_gal.cpp:200:21
#12 0x7f77b35bc95a in SCH_DRAW_PANEL::onPaint(wxPaintEvent&) master/build/debug/../../eeschema/sch_draw_panel.cpp:210:25
#13 0x7f77cf7d5fbd in wxEvtHandler::ProcessEventIfMatchesId(wxEventTableEntryBase const&, wxEvtHandler*, wxEvent&) (/lib64/libwx_baseu-3.0.so.0+0x222fbd)
Direct leak of 240 byte(s) in 3 object(s) allocated from:
#0 0x58c417 in operator new(unsigned long) (master/build/debug/kicad/kicad+0x58c417)
#1 0x7f77b4122c5c in WS_DATA_ITEM::SyncDrawItems(WS_DRAW_ITEM_LIST*, KIGFX::VIEW*) master/build/debug/../../common/page_layout/ws_data_item.cpp:110:20
#2 0x7f77b4147028 in WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList(PAGE_INFO const&, TITLE_BLOCK const&) master/build/debug/../../common/page_layout/ws_draw_item.cpp:472:17
#3 0x7f77b3d4c56a in KIGFX::WS_PROXY_VIEW_ITEM::ViewDraw(int, KIGFX::VIEW*) const master/build/debug/../../common/page_layout/ws_proxy_view_item.cpp:98:14
#4 0x7f77b3f971b2 in KIGFX::VIEW::draw(KIGFX::VIEW_ITEM*, int, bool) master/build/debug/../../common/view/view.cpp:1050:20
#5 0x7f77b3fd4cc7 in KIGFX::VIEW::drawItem::operator()(KIGFX::VIEW_ITEM*) master/build/debug/../../common/view/view.cpp:981:19
#6 0x7f77b3fd4607 in bool RTree<KIGFX::VIEW_ITEM*, int, 2, double, 8, 4>::Search<KIGFX::VIEW::drawItem>(RTree<KIGFX::VIEW_ITEM*, int, 2, double, 8, 4>::Node*, RTree<KIGFX::VIEW_ITEM*, int, 2, double, 8, 4>::Rect*, KIGFX::VIEW::drawItem&, int&) master/build/debug/../../thirdparty/rtree/geometry/rtree.h:568:26
#7 0x7f77b3fd41a9 in int RTree<KIGFX::VIEW_ITEM*, int, 2, double, 8, 4>::Search<KIGFX::VIEW::drawItem>(int const*, int const*, KIGFX::VIEW::drawItem&) master/build/debug/../../thirdparty/rtree/geometry/rtree.h:177:9
#8 0x7f77b3fa4e49 in void KIGFX::VIEW_RTREE::Query<KIGFX::VIEW::drawItem>(BOX2<VECTOR2<int> > const&, KIGFX::VIEW::drawItem&) master/build/debug/../../include/view/view_rtree.h:98:26
#9 0x7f77b3f96692 in KIGFX::VIEW::redrawRect(BOX2<VECTOR2<int> > const&) master/build/debug/../../common/view/view.cpp:1020:23
#10 0x7f77b3f984b9 in KIGFX::VIEW::Redraw() master/build/debug/../../common/view/view.cpp:1164:5
#11 0x7f77b4187abd in EDA_DRAW_PANEL_GAL::onPaint(wxPaintEvent&) master/build/debug/../../common/draw_panel_gal.cpp:200:21
#12 0x7f77b35bc95a in SCH_DRAW_PANEL::onPaint(wxPaintEvent&) master/build/debug/../../eeschema/sch_draw_panel.cpp:210:25
#13 0x7f77cf7d5fbd in wxEvtHandler::ProcessEventIfMatchesId(wxEventTableEntryBase const&, wxEvtHandler*, wxEvent&) (/lib64/libwx_baseu-3.0.so.0+0x222fbd)
Indirect leak of 668 byte(s) in 8 object(s) allocated from:
#0 0x58c417 in operator new(unsigned long) (master/build/debug/kicad/kicad+0x58c417)
#1 0x59b78b in __gnu_cxx::new_allocator<wchar_t>::allocate(unsigned long, void const*) /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/ext/new_allocator.h:114:27
#2 0x59b6d3 in std::allocator_traits<std::allocator<wchar_t> >::allocate(std::allocator<wchar_t>&, unsigned long) /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/alloc_traits.h:444:20
#3 0x59b2d8 in std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::_M_create(unsigned long&, unsigned long) /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/basic_string.tcc:153:14
#4 0x59ec9c in std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::_M_assign(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&) /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/basic_string.tcc:265:24
#5 0x7f77b2f034e3 in std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::assign(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&) /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/basic_string.h:1366:8
#6 0x7f77b2f034ac in std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::operator=(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&) /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/basic_string.h:696:15
#7 0x7f77b2efa67e in wxString::operator=(wxString const&) /usr/include/wx-3.0/wx/string.h:1883:16
#8 0x7f77b3c07249 in EDA_TEXT::EDA_TEXT(wxString const&) master/build/debug/../../common/eda_text.cpp:94:22
#9 0x7f77b4130d1b in WS_DRAW_ITEM_TEXT::WS_DRAW_ITEM_TEXT(WS_DATA_ITEM*, int, wxString&, wxPoint, wxSize, int, bool, bool) master/build/debug/../../include/ws_draw_item.h:279:13
#10 0x7f77b412b0e5 in WS_DATA_ITEM_TEXT::SyncDrawItems(WS_DRAW_ITEM_LIST*, KIGFX::VIEW*) master/build/debug/../../common/page_layout/ws_data_item.cpp:601:20
#11 0x7f77b4147028 in WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList(PAGE_INFO const&, TITLE_BLOCK const&) master/build/debug/../../common/page_layout/ws_draw_item.cpp:472:17
#12 0x7f77b3d4c56a in KIGFX::WS_PROXY_VIEW_ITEM::ViewDraw(int, KIGFX::VIEW*) const master/build/debug/../../common/page_layout/ws_proxy_view_item.cpp:98:14
#13 0x7f77b3f971b2 in KIGFX::VIEW::draw(KIGFX::VIEW_ITEM*, int, bool) master/build/debug/../../common/view/view.cpp:1050:20
#14 0x7f77b3fd4cc7 in KIGFX::VIEW::drawItem::operator()(KIGFX::VIEW_ITEM*) master/build/debug/../../common/view/view.cpp:981:19
#15 0x7f77b3fd4607 in bool RTree<KIGFX::VIEW_ITEM*, int, 2, double, 8, 4>::Search<KIGFX::VIEW::drawItem>(RTree<KIGFX::VIEW_ITEM*, int, 2, double, 8, 4>::Node*, RTree<KIGFX::VIEW_ITEM*, int, 2, double, 8, 4>::Rect*, KIGFX::VIEW::drawItem&, int&) master/build/debug/../../thirdparty/rtree/geometry/rtree.h:568:26
#16 0x7f77b3fd41a9 in int RTree<KIGFX::VIEW_ITEM*, int, 2, double, 8, 4>::Search<KIGFX::VIEW::drawItem>(int const*, int const*, KIGFX::VIEW::drawItem&) master/build/debug/../../thirdparty/rtree/geometry/rtree.h:177:9
#17 0x7f77b3fa4e49 in void KIGFX::VIEW_RTREE::Query<KIGFX::VIEW::drawItem>(BOX2<VECTOR2<int> > const&, KIGFX::VIEW::drawItem&) master/build/debug/../../include/view/view_rtree.h:98:26
#18 0x7f77b3f96692 in KIGFX::VIEW::redrawRect(BOX2<VECTOR2<int> > const&) master/build/debug/../../common/view/view.cpp:1020:23
#19 0x7f77b3f984b9 in KIGFX::VIEW::Redraw() master/build/debug/../../common/view/view.cpp:1164:5
#20 0x7f77b4187abd in EDA_DRAW_PANEL_GAL::onPaint(wxPaintEvent&) master/build/debug/../../common/draw_panel_gal.cpp:200:21
#21 0x7f77b35bc95a in SCH_DRAW_PANEL::onPaint(wxPaintEvent&) master/build/debug/../../eeschema/sch_draw_panel.cpp:210:25
#22 0x7f77cf7d5fbd in wxEvtHandler::ProcessEventIfMatchesId(wxEventTableEntryBase const&, wxEvtHandler*, wxEvent&) (/lib64/libwx_baseu-3.0.so.0+0x222fbd)
Indirect leak of 668 byte(s) in 8 object(s) allocated from:
#0 0x58c417 in operator new(unsigned long) (master/build/debug/kicad/kicad+0x58c417)
#1 0x59b78b in __gnu_cxx::new_allocator<wchar_t>::allocate(unsigned long, void const*) /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/ext/new_allocator.h:114:27
#2 0x59b6d3 in std::allocator_traits<std::allocator<wchar_t> >::allocate(std::allocator<wchar_t>&, unsigned long) /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/alloc_traits.h:444:20
#3 0x59b2d8 in std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::_M_create(unsigned long&, unsigned long) /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/basic_string.tcc:153:14
#4 0x59f4ed in void std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::_M_construct<wchar_t*>(wchar_t*, wchar_t*, std::forward_iterator_tag) /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/basic_string.tcc:219:14
#5 0x7f77b2efed18 in void std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::_M_construct_aux<wchar_t*>(wchar_t*, wchar_t*, std::__false_type) /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/basic_string.h:247:11
#6 0x7f77b2efeac4 in void std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::_M_construct<wchar_t*>(wchar_t*, wchar_t*) /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/basic_string.h:266:4
#7 0x7f77b2efe825 in std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::basic_string(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&) /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/basic_string.h:451:9
#8 0x7f77b2efe653 in wxString::wxString(wxString const&) /usr/include/wx-3.0/wx/string.h:1220:41
#9 0x7f77b3c07165 in EDA_TEXT::EDA_TEXT(wxString const&) master/build/debug/../../common/eda_text.cpp:87:9
#10 0x7f77b4130d1b in WS_DRAW_ITEM_TEXT::WS_DRAW_ITEM_TEXT(WS_DATA_ITEM*, int, wxString&, wxPoint, wxSize, int, bool, bool) master/build/debug/../../include/ws_draw_item.h:279:13
#11 0x7f77b412b0e5 in WS_DATA_ITEM_TEXT::SyncDrawItems(WS_DRAW_ITEM_LIST*, KIGFX::VIEW*) master/build/debug/../../common/page_layout/ws_data_item.cpp:601:20
#12 0x7f77b4147028 in WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList(PAGE_INFO const&, TITLE_BLOCK const&) master/build/debug/../../common/page_layout/ws_draw_item.cpp:472:17
#13 0x7f77b3d4c56a in KIGFX::WS_PROXY_VIEW_ITEM::ViewDraw(int, KIGFX::VIEW*) const master/build/debug/../../common/page_layout/ws_proxy_view_item.cpp:98:14
#14 0x7f77b3f971b2 in KIGFX::VIEW::draw(KIGFX::VIEW_ITEM*, int, bool) master/build/debug/../../common/view/view.cpp:1050:20
#15 0x7f77b3fd4cc7 in KIGFX::VIEW::drawItem::operator()(KIGFX::VIEW_ITEM*) master/build/debug/../../common/view/view.cpp:981:19
#16 0x7f77b3fd4607 in bool RTree<KIGFX::VIEW_ITEM*, int, 2, double, 8, 4>::Search<KIGFX::VIEW::drawItem>(RTree<KIGFX::VIEW_ITEM*, int, 2, double, 8, 4>::Node*, RTree<KIGFX::VIEW_ITEM*, int, 2, double, 8, 4>::Rect*, KIGFX::VIEW::drawItem&, int&) master/build/debug/../../thirdparty/rtree/geometry/rtree.h:568:26
#17 0x7f77b3fd41a9 in int RTree<KIGFX::VIEW_ITEM*, int, 2, double, 8, 4>::Search<KIGFX::VIEW::drawItem>(int const*, int const*, KIGFX::VIEW::drawItem&) master/build/debug/../../thirdparty/rtree/geometry/rtree.h:177:9
#18 0x7f77b3fa4e49 in void KIGFX::VIEW_RTREE::Query<KIGFX::VIEW::drawItem>(BOX2<VECTOR2<int> > const&, KIGFX::VIEW::drawItem&) master/build/debug/../../include/view/view_rtree.h:98:26
#19 0x7f77b3f96692 in KIGFX::VIEW::redrawRect(BOX2<VECTOR2<int> > const&) master/build/debug/../../common/view/view.cpp:1020:23
#20 0x7f77b3f984b9 in KIGFX::VIEW::Redraw() master/build/debug/../../common/view/view.cpp:1164:5
#21 0x7f77b4187abd in EDA_DRAW_PANEL_GAL::onPaint(wxPaintEvent&) master/build/debug/../../common/draw_panel_gal.cpp:200:21
#22 0x7f77b35bc95a in SCH_DRAW_PANEL::onPaint(wxPaintEvent&) master/build/debug/../../eeschema/sch_draw_panel.cpp:210:25
#23 0x7f77cf7d5fbd in wxEvtHandler::ProcessEventIfMatchesId(wxEventTableEntryBase const&, wxEvtHandler*, wxEvent&) (/lib64/libwx_baseu-3.0.so.0+0x222fbd)
-----------------------------------------------------
Suppressions used:
count bytes template
22936 911624 libfontconfig.so
7 1176 CONDITIONAL_MENU::AddItem
7 448 wxBitmap::wxBitmap
14 1520 wxMenuItemBase
-----------------------------------------------------
SUMMARY: AddressSanitizer: 12176 byte(s) leaked in 90 allocation(s).
Steps to reproduce
- Open eeschema or pcbnew
- Observe the leak with ASAN when the application is closed
KiCad Version
Application: Eeschema
Version: (5.99.0-861-ge93304566), debug build
Libraries:
wxWidgets 3.0.4
libcurl/7.66.0 OpenSSL/1.1.1d-fips zlib/1.2.11 brotli/1.0.7 libidn2/2.3.0 libpsl/0.21.0 (+libidn2/2.2.0) libssh/0.9.3/openssl/zlib nghttp2/1.39.2
Platform: Linux 5.3.16-300.fc31.x86_64 x86_64, 64 bit, Little endian, wxGTK
Build Info:
Build date: Feb 8 2020 23:20:28
wxWidgets: 3.0.4 (wchar_t,wx containers,compatible with 2.8) GTK+ 3.24
Boost: 1.69.0
OpenCASCADE Technology: 7.4.0
Curl: 7.66.0
Compiler: Clang 9.0.0 with C++ ABI 1002
Build settings:
KICAD_SCRIPTING=ON
KICAD_SCRIPTING_MODULES=ON
KICAD_SCRIPTING_PYTHON3=ON
KICAD_SCRIPTING_WXPYTHON=ON
KICAD_SCRIPTING_WXPYTHON_PHOENIX=ON
KICAD_SCRIPTING_ACTION_MENU=ON
BUILD_GITHUB_PLUGIN=ON
KICAD_USE_OCE=OFF
KICAD_USE_OCC=ON
KICAD_SPICE=ON
KICAD_STDLIB_DEBUG=OFF
KICAD_STDLIB_LIGHT_DEBUG=ON
KICAD_SANITIZE=ON