[go: up one dir, main page]

Fix leaking ToolbarMenuButton structures

Fix a leak whereby ToolbarMenuButton structures created by a toolbar are not properly destroyed.

Indirect leak of 64 byte(s) in 1 object(s) allocated from:
    #0 0x783c8eae2002 in operator new(unsigned long) /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x783c8cc04899 in std::__new_allocator<std::pair<Gtk::Widget*, Gtk::Widget*>*>::allocate(unsigned long, void const*) /usr/include/c++/13.2.1/bits/new_allocator.h:147
    #2 0x783c8cc04a55 in std::allocator<std::pair<Gtk::Widget*, Gtk::Widget*>*>::allocate(unsigned long) /usr/include/c++/13.2.1/bits/allocator.h:198
    #3 0x783c8cc04a55 in std::allocator_traits<std::allocator<std::pair<Gtk::Widget*, Gtk::Widget*>*> >::allocate(std::allocator<std::pair<Gtk::Widget*, Gtk::Widget*>*>&, unsigned long) /usr/include/c++/13.2.1/bits/alloc_traits.h:482
    #4 0x783c8cc04a55 in std::_Deque_base<std::pair<Gtk::Widget*, Gtk::Widget*>, std::allocator<std::pair<Gtk::Widget*, Gtk::Widget*> > >::_M_allocate_map(unsigned long) /usr/include/c++/13.2.1/bits/stl_deque.h:597
    #5 0x783c8cc04a55 in std::_Deque_base<std::pair<Gtk::Widget*, Gtk::Widget*>, std::allocator<std::pair<Gtk::Widget*, Gtk::Widget*> > >::_M_initialize_map(unsigned long) /usr/include/c++/13.2.1/bits/stl_deque.h:646
    #6 0x783c8cc05106 in std::_Deque_base<std::pair<Gtk::Widget*, Gtk::Widget*>, std::allocator<std::pair<Gtk::Widget*, Gtk::Widget*> > >::_Deque_base(std::allocator<std::pair<Gtk::Widget*, Gtk::Widget*> > const&, unsigned long) /usr/include/c++/13.2.1/bits/stl_deque.h:468
    #7 0x783c8cc05231 in std::deque<std::pair<Gtk::Widget*, Gtk::Widget*>, std::allocator<std::pair<Gtk::Widget*, Gtk::Widget*> > >::deque(std::deque<std::pair<Gtk::Widget*, Gtk::Widget*>, std::allocator<std::pair<Gtk::Widget*, Gtk::Widget*> > > const&) /usr/include/c++/13.2.1/bits/stl_deque.h:919
    #8 0x783c8cc058bc in std::stack<std::pair<Gtk::Widget*, Gtk::Widget*>, std::deque<std::pair<Gtk::Widget*, Gtk::Widget*>, std::allocator<std::pair<Gtk::Widget*, Gtk::Widget*> > > >::stack(std::stack<std::pair<Gtk::Widget*, Gtk::Widget*>, std::deque<std::pair<Gtk::Widget*, Gtk::Widget*>, std::allocator<std::pair<Gtk::Widget*, Gtk::Widget*> > > > const&) /usr/include/c++/13.2.1/bits/stl_stack.h:99
    #9 0x783c8cc058bc in Inkscape::UI::Toolbar::Toolbar::ToolbarMenuButton::ToolbarMenuButton(int, int, Gtk::MenuButton*, std::stack<std::pair<Gtk::Widget*, Gtk::Widget*>, std::deque<std::pair<Gtk::Widget*, Gtk::Widget*>, std::allocator<std::pair<Gtk::Widget*, Gtk::Widget*> > > > const&, std::stack<std::pair<Gtk::Widget*, Gtk::Widget*>, std::deque<std::pair<Gtk::Widget*, Gtk::Widget*>, std::allocator<std::pair<Gtk::Widget*, Gtk::Widget*> > > > const&) src/ui/toolbar/toolbar.h:56
    #10 0x783c8cbfdacc in Inkscape::UI::Toolbar::Toolbar::insert_menu_btn(int, int, std::stack<std::pair<Gtk::Widget*, Gtk::Widget*>, std::deque<std::pair<Gtk::Widget*, Gtk::Widget*>, std::allocator<std::pair<Gtk::Widget*, Gtk::Widget*> > > >) src/ui/toolbar/toolbar.cpp:138
    #11 0x783c8cc004ec in Inkscape::UI::Toolbar::Toolbar::init_menu_btns() src/ui/toolbar/toolbar.cpp:103
    #12 0x783c8cac0e38 in Inkscape::UI::Toolbar::CalligraphyToolbar::CalligraphyToolbar(SPDesktop*) src/ui/toolbar/calligraphy-toolbar.cpp:127
    #13 0x783c8cc23600 in std::__detail::_MakeUniq<Inkscape::UI::Toolbar::CalligraphyToolbar>::__single_object std::make_unique<Inkscape::UI::Toolbar::CalligraphyToolbar, SPDesktop*&>(SPDesktop*&) /usr/include/c++/13.2.1/bits/unique_ptr.h:1070
    #14 0x783c8cc21820 in operator() src/ui/toolbar/toolbars.cpp:68
    #15 0x783c8cc2194c in _FUN src/ui/toolbar/toolbars.cpp:68
    #16 0x783c8cc1fac9 in Inkscape::UI::Toolbar::Toolbars::create_toolbars(SPDesktop*) src/ui/toolbar/toolbars.cpp:119
    #17 0x783c8d773964 in SPDesktopWidget::SPDesktopWidget(InkscapeWindow*, SPDocument*) src/ui/widget/desktop-widget.cpp:218
    #18 0x783c8def3280 in auto Gtk::make_managed<SPDesktopWidget, InkscapeWindow*, SPDocument*&>(InkscapeWindow*&&, SPDocument*&) /usr/include/gtkmm-4.0/gtkmm/object.h:70
    #19 0x783c8def13de in InkscapeWindow::InkscapeWindow(SPDocument*) src/inkscape-window.cpp:124
    #20 0x783c8defa96b in InkscapeApplication::window_open(SPDocument*) src/inkscape-application.cpp:448
    #21 0x783c8defcaad in InkscapeApplication::create_window(SPDocument*, bool) src/inkscape-application.cpp:845
    #22 0x783c8df0d396 in InkscapeApplication::process_document(SPDocument*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) src/inkscape-application.cpp:1000
    #23 0x783c8df2adc8 in InkscapeApplication::on_activate() src/inkscape-application.cpp:1105
    #24 0x783c8df2b0b6 in operator() src/inkscape-application.cpp:657
    #25 0x783c8df2b0b6 in __invoke_impl<void, InkscapeApplication::InkscapeApplication()::<lambda()>&> /usr/include/c++/13.2.1/bits/invoke.h:61
    #26 0x783c8df2b0b6 in __invoke<InkscapeApplication::InkscapeApplication()::<lambda()>&> /usr/include/c++/13.2.1/bits/invoke.h:96
    #27 0x783c8df2b0b6 in invoke<InkscapeApplication::InkscapeApplication()::<lambda()>&> /usr/include/c++/13.2.1/functional:113
    #28 0x783c8df2b0b6 in operator()<> /usr/include/sigc++-3.0/sigc++/adaptors/adaptor_trait.h:100
    #29 0x783c8df2b0b6 in call_it /usr/include/sigc++-3.0/sigc++/functors/slot.h:154
    #30 0x783c88a11b1c in Glib::SignalProxyNormal::slot0_void_callback(_GObject*, void*) (/usr/lib/libglibmm-2.68.so.1+0x60b1c) (BuildId: 422110a616a7e2a04d2f7ad41de1975a255efde7)

Additionally, a small amount of code cleanup is done.

Edited by Rafał Siejakowski

Merge request reports

Loading