Crash on group during move
#### Steps to reproduce: <!-- Describe what you did (step-by-step) so we can reproduce: --> - open Inkscape - turn on snapping, all advanced options in snap pop-up box ~~(not absolutely sure if necessary)~~ - draw two rectangles - switch to select tool and select both - drag to move the rectangles - Ctrl+G to group while in the middle of the drag May take 2-3 attempts #### What happened? - crash, see backtrace in https://gitlab.com/inkscape/inkscape/-/issues/3515#note_946971609 <details><summary>Old backtrace for a single item</summary> <pre> ◊0 0x00007fc6aaaecdcd in gdk_window_get_display (window=0x559ddbd4cd30) at ../../../../gdk/gdkwindow.c:2324 2324 ../../../../gdk/gdkwindow.c: No such file or directory. [Current thread is 1 (Thread 0x7fc6a65d2100 (LWP 411955))] (gdb) bt ◊0 0x00007fc6aaaecdcd in gdk_window_get_display (window=0x559ddbd4cd30) at ../../../../gdk/gdkwindow.c:2324 ◊1 0x00007fc6aaadbdce in event_get_display (event=0x559ddbb54db0) at ../../../../gdk/gdkevents.c:457 ◊2 gdk_event_free (event=0x559ddbb54db0) at ../../../../gdk/gdkevents.c:839 ◊3 0x00007fc6ae3d3f38 in Inkscape::UI::Tools::DelayedSnapEvent::~DelayedSnapEvent() (this=0x559ddba83850, __in_chrg=<optimised out>) at ../src/ui/tools/tool-base.h:88 ◊4 Inkscape::UI::Tools::sp_event_context_snap_watchdog_callback(void*) (data=0x559ddba83850, data@entry=<error reading variable: value has been optimised out>) at ../src/ui/tools/tool-base.cpp:1648 ◊5 0x00007fc6ad21abe8 in g_timeout_dispatch (source=0x559ddd844f90, callback=<optimised out>, user_data=<optimised out>) at ../../../glib/gmain.c:4800 ◊6 0x00007fc6ad21a04e in g_main_dispatch (context=0x559dd9f76a90) at ../../../glib/gmain.c:3309 ◊7 g_main_context_dispatch (context=context@entry=0x559dd9f76a90) at ../../../glib/gmain.c:3974 ◊8 0x00007fc6ad21a400 in g_main_context_iterate (context=context@entry=0x559dd9f76a90, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimised out>) at ../../../glib/gmain.c:4047 ◊9 0x00007fc6ad21a4a3 in g_main_context_iteration (context=context@entry=0x559dd9f76a90, may_block=may_block@entry=1) at ../../../glib/gmain.c:4108 ◊10 0x00007fc6ac249fe5 in g_application_run (application=0x559dd9fd1210 [gtkmm__GtkApplication], argc=<optimised out>, argv=<optimised out>) at ../../../gio/gapplication.c:2559 ◊11 0x0000559dd836b364 in main(int, char**) (argc=<optimised out>, argv=<optimised out>) at /usr/include/glibmm-2.4/glibmm/refptr.h:405 </pre> </details> <details><summary>Update: this is outdated; Backtrace with https://gitlab.com/inkscape/inkscape/-/merge_requests/4444 abf0a04, which doesn't include snapping functions in backtrace</summary> <pre> (org.inkscape.Inkscape:410950): GLib-CRITICAL **: 22:13:13.276: Source ID 1480107040 was not found when attempting to remove it malloc_consolidate(): invalid chunk size Thread 1 "inkscape" received signal SIGABRT, Aborted. __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50 50 ../sysdeps/unix/sysv/linux/raise.c: No such file or directory. (gdb) bt ◊0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50 ◊1 0x00007ffff5a03859 in __GI_abort () at abort.c:79 ◊2 0x00007ffff5a6e26e in __libc_message (action=action@entry=do_abort, fmt=fmt@entry=0x7ffff5b98298 "%s\n") at ../sysdeps/posix/libc_fatal.c:155 ◊3 0x00007ffff5a762fc in malloc_printerr (str=str@entry=0x7ffff5b9a278 "malloc_consolidate(): invalid chunk size") at malloc.c:5347 ◊4 0x00007ffff5a76ad8 in malloc_consolidate (av=av@entry=0x7ffff5bcdb80 <main_arena>) at malloc.c:4477 ◊5 0x00007ffff5a78c83 in _int_malloc (av=av@entry=0x7ffff5bcdb80 <main_arena>, bytes=bytes@entry=1368) at malloc.c:3699 ◊6 0x00007ffff5a7cb95 in __libc_calloc (n=<optimised out>, elem_size=<optimised out>) at malloc.c:3428 ◊7 0x00007ffff607fef1 in g_malloc0 (n_bytes=n_bytes@entry=1368) at ../../../glib/gmem.c:132 ◊8 0x00007ffff3b971d8 in _gtk_css_lookup_new (relevant=relevant@entry=0x0) at ../../../../gtk/gtkcsslookup.c:32 ◊9 0x00007ffff3bac038 in gtk_css_static_style_new_compute (provider=0x555555639430, matcher=matcher@entry=0x7fffffffc890, parent=parent@entry=0x5555583c8140 [GtkCssAnimatedStyle]) at ../../../../gtk/gtkcssstaticstyle.c:183 ◊10 0x00007ffff3b99905 in gtk_css_node_create_style (cssnode=0x5555574368f0 [GtkCssNode]) at ../../../../gtk/gtkcssnode.c:371 ◊11 gtk_css_node_real_update_style (cssnode=0x5555574368f0 [GtkCssNode], change=10745806976, timestamp=261266266260, style=0x555558560300 [GtkCssStaticStyle]) at ../../../../gtk/gtkcssnode.c:425 ◊12 0x00007ffff3b98724 in gtk_css_node_ensure_style (cssnode=0x5555574368f0 [GtkCssNode], current_time=current_time@entry=261266266260) at ../../../../gtk/gtkcssnode.c:1007 ◊13 0x00007ffff3b986f7 in gtk_css_node_ensure_style (current_time=261266266260, cssnode=<optimised out>) at ../../../../gtk/gtkcssnode.c:1003 ◊14 gtk_css_node_ensure_style (cssnode=0x555557436960 [GtkCssNode], current_time=current_time@entry=261266266260) at ../../../../gtk/gtkcssnode.c:1003 ◊15 0x00007ffff3b986f7 in gtk_css_node_ensure_style (current_time=261266266260, cssnode=<optimised out>) at ../../../../gtk/gtkcssnode.c:1003 ◊16 gtk_css_node_ensure_style (cssnode=cssnode@entry=0x555557436a40 [GtkCssNode], current_time=261266266260) at ../../../../gtk/gtkcssnode.c:1003 ◊17 0x00007ffff3b9890e in gtk_css_node_ensure_style (current_time=<optimised out>, cssnode=0x555557436a40 [GtkCssNode]) at ../../../../gtk/gtkcssnode.c:1033 ◊18 gtk_css_node_get_style (cssnode=0x555557436a40 [GtkCssNode]) at ../../../../gtk/gtkcssnode.c:1033 ◊19 0x00007ffff3b8b970 in gtk_css_gadget_get_style (gadget=0x555557435410 [GtkCssCustomGadget]) at ../../../../gtk/gtkcssgadget.c:1107 ◊20 gtk_css_gadget_get_content_allocation (gadget=0x555557435410 [GtkCssCustomGadget], allocation=allocation@entry=0x7fffffffca90, baseline=baseline@entry=0x7fffffffca8c) at ../../../../gtk/gtkcssgadget.c:1107 ◊21 0x00007ffff3bbc26b in gtk_entry_get_text_area_size (entry=entry@entry=0x555557386fb0 [gtkmm__GtkSpinButton], x=x@entry=0x0, y=y@entry=0x0, width=width@entry=0x7fffffffcb08, height=height@entry=0x7fffffffcb0c) at ../../../../gtk/gtkentry.c:3723 ◊22 0x00007ffff3bc34a0 in update_im_cursor_location (entry=0x555557386fb0 [gtkmm__GtkSpinButton]) at ../../../../gtk/gtkentry.c:6255 ◊23 gtk_entry_recompute (entry=entry@entry=0x555557386fb0 [gtkmm__GtkSpinButton]) at ../../../../gtk/gtkentry.c:6285 ◊24 0x00007ffff3bc3b87 in buffer_deleted_text (buffer=<optimised out>, position=<optimised out>, n_chars=<optimised out>, entry=0x555557386fb0 [gtkmm__GtkSpinButton]) at ../../../../gtk/gtkentry.c:5499 ◊28 0x00007ffff4f9b0f3 in <emit signal ??? on instance 0x55555743e2e0 [GtkEntryBuffer]> (instance=<optimised out>, signal_id=<optimised out>, detail=<optimised out>) at ../../../gobject/gsignal.c:3555 ◊25 0x00007ffff4f7b802 in g_closure_invoke (closure=0x55555743ee70, return_value=0x0, n_param_values=3, param_values=0x7fffffffcd30, invocation_hint=0x7fffffffccb0) at ../../../gobject/gclosure.c:810 --Type <RET> for more, q to quit, c to continue without paging-- ◊26 0x00007ffff4f8f814 in signal_emit_unlocked_R (node=node@entry=0x555557209c00, detail=detail@entry=0, instance=instance@entry=0x55555743e2e0, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7fffffffcd30) at ../../../gobject/gsignal.c:3743 ◊27 0x00007ffff4f9abbe in g_signal_emit_valist (instance=<optimised out>, signal_id=<optimised out>, detail=<optimised out>, var_args=var_args@entry=0x7fffffffcf10) at ../../../gobject/gsignal.c:3499 ◊29 0x00007ffff3bccb5c in gtk_entry_buffer_normal_delete_text (buffer=0x55555743e2e0 [GtkEntryBuffer], position=0, n_chars=7) at ../../../../gtk/gtkentrybuffer.c:213 ◊30 0x00007ffff3bc16e3 in gtk_entry_real_delete_text (editable=0x555557386fb0, start_pos=0, end_pos=<optimised out>) at ../../../../gtk/gtkentry.c:5421 ◊34 0x00007ffff4f9bb9c in <emit signal 0x7ffff3df8ca4 "delete-text" on instance 0x555557386fb0 [gtkmm__GtkSpinButton]> (instance=instance@entry=0x555557386fb0, detailed_signal=detailed_signal@entry=0x7ffff3df8ca4 "delete-text") at ../../../gobject/gsignal.c:3595 ◊31 0x00007ffff4f7b802 in g_closure_invoke (closure=0x5555571dcd70, return_value=0x0, n_param_values=3, param_values=0x7fffffffd220, invocation_hint=0x7fffffffd1a0) at ../../../gobject/gclosure.c:810 ◊32 0x00007ffff4f8ef96 in signal_emit_unlocked_R (node=node@entry=0x5555570f0c50, detail=detail@entry=0, instance=instance@entry=0x555557386fb0, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7fffffffd220) at ../../../gobject/gsignal.c:3781 ◊33 0x00007ffff4f9abbe in g_signal_emit_valist (instance=instance@entry=0x555557386fb0, signal_id=signal_id@entry=317, detail=detail@entry=0, var_args=var_args@entry=0x7fffffffd468) at ../../../gobject/gsignal.c:3499 ◊35 0x00007ffff3bbc19e in gtk_entry_delete_text (editable=0x555557386fb0, start_pos=0, end_pos=-1) at ../../../../gtk/gtkentry.c:5186 ◊36 0x00007ffff3bc97ed in gtk_entry_set_text (entry=entry@entry=0x555557386fb0 [gtkmm__GtkSpinButton], text=text@entry=0x55555590d2c0 "98.045") at ../../../../gtk/gtkentry.c:7727 ◊37 0x00007ffff3cf137b in gtk_spin_button_default_output (spin_button=spin_button@entry=0x555557386fb0 [gtkmm__GtkSpinButton]) at ../../../../gtk/gtkspinbutton.c:1902 ◊38 0x00007ffff3cf1938 in gtk_spin_button_value_changed (adjustment=0x555557401a90 [gtkmm__GtkAdjustment], spin_button=0x555557386fb0 [gtkmm__GtkSpinButton]) at ../../../../gtk/gtkspinbutton.c:1566 ◊42 0x00007ffff4f9b0f3 in <emit signal ??? on instance 0x555557401a90 [gtkmm__GtkAdjustment]> (instance=instance@entry=0x555557401a90, signal_id=<optimised out>, detail=detail@entry=0) at ../../../gobject/gsignal.c:3555 ◊39 0x00007ffff4f7b802 in g_closure_invoke (closure=0x55555743ec70, return_value=0x0, n_param_values=1, param_values=0x7fffffffd800, invocation_hint=0x7fffffffd780) at ../../../gobject/gclosure.c:810 ◊40 0x00007ffff4f8f814 in signal_emit_unlocked_R (node=node@entry=0x555556d2e860, detail=detail@entry=0, instance=instance@entry=0x555557401a90, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7fffffffd800) at ../../../gobject/gsignal.c:3743 ◊41 0x00007ffff4f9abbe in g_signal_emit_valist (instance=<optimised out>, signal_id=<optimised out>, detail=<optimised out>, var_args=var_args@entry=0x7fffffffd9b0) at ../../../gobject/gsignal.c:3499 ◊43 0x00007ffff3b1c27f in emit_value_changed (adjustment=0x555557401a90 [gtkmm__GtkAdjustment]) at ../../../../gtk/gtkadjustment.c:450 ◊44 adjustment_set_value (value=98.045082092285156, adjustment=0x555557401a90 [gtkmm__GtkAdjustment]) at ../../../../gtk/gtkadjustment.c:450 ◊45 gtk_adjustment_set_value_internal (adjustment=0x555557401a90 [gtkmm__GtkAdjustment], value=98.045082092285156, animate=<optimised out>) at ../../../../gtk/gtkadjustment.c:545 ◊46 0x00007ffff3b1c5fa in gtk_adjustment_set_value (adjustment=<optimised out>, value=4.6355720635283614e-310) at ../../../../gtk/gtkadjustment.c:567 --Type <RET> for more, q to quit, c to continue without paging--c ◊47 0x00007ffff45de9f5 in Gtk::Adjustment::set_value(double) (this=<optimised out>, value=<optimised out>) at ../gtkmm/adjustment.h:103 ◊48 0x00007ffff71418af in Inkscape::UI::Toolbar::SelectToolbar::layout_widget_update(Inkscape::Selection*) (this=0x5555572c4ec0, sel=<optimised out>) at /usr/include/glibmm-2.4/glibmm/refptr.h:259 ◊49 0x00007ffff71419da in Inkscape::UI::Toolbar::SelectToolbar::on_inkscape_selection_modified(Inkscape::Selection*, unsigned int) (this=<optimised out>, selection=<optimised out>, flags=<optimised out>) at ../../src/ui/toolbar/select-toolbar.cpp:499 ◊50 0x00007ffff714cd24 in sigc::bound_mem_functor2<void, Inkscape::UI::Toolbar::SelectToolbar, Inkscape::Selection*, unsigned int>::operator()(Inkscape::Selection* const&, unsigned int const&) const (_A_a2=<optimised out>, _A_a1=<optimised out>, this=<optimised out>) at /usr/include/sigc++-2.0/sigc++/limit_reference.h:93 ◊51 sigc::adaptor_functor<sigc::bound_mem_functor2<void, Inkscape::UI::Toolbar::SelectToolbar, Inkscape::Selection*, unsigned int> >::operator()<Inkscape::Selection* const&, unsigned int const&>(Inkscape::Selection* const&, unsigned int const&) const (_A_arg2=<optimised out>, _A_arg1=<optimised out>, this=<optimised out>) at /usr/include/sigc++-2.0/sigc++/adaptors/adaptor_trait.h:108 ◊52 sigc::internal::slot_call2<sigc::bound_mem_functor2<void, Inkscape::UI::Toolbar::SelectToolbar, Inkscape::Selection*, unsigned int>, void, Inkscape::Selection*, unsigned int>::call_it(sigc::internal::slot_rep*, Inkscape::Selection* const&, unsigned int const&) (rep=<optimised out>, a_1=<optimised out>, a_2=<optimised out>) at /usr/include/sigc++-2.0/sigc++/functors/slot.h:206 ◊53 0x00007ffff70f55c9 in sigc::slot2<void, Inkscape::Selection*, unsigned int>::operator()(Inkscape::Selection* const&, unsigned int const&) const (_A_a2=<optimised out>, _A_a1=<optimised out>, this=<optimised out>) at /usr/include/sigc++-2.0/sigc++/functors/slot_base.h:335 ◊54 sigc::adaptor_functor<sigc::slot<void, Inkscape::Selection*, unsigned int, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil> >::operator()<Inkscape::Selection* const&, unsigned int const&>(Inkscape::Selection* const&, unsigned int const&) const (_A_arg2=<optimised out>, _A_arg1=<optimised out>, this=<optimised out>) at /usr/include/sigc++-2.0/sigc++/adaptors/adaptor_trait.h:108 ◊55 sigc::internal::slot_call<sigc::slot<void, Inkscape::Selection*, unsigned int, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>, void, Inkscape::Selection*, unsigned int>::call_it(sigc::internal::slot_rep*, Inkscape::Selection* const&, unsigned int const&) (rep=<optimised out>, a_◊0=<optimised out>, a_◊1=<optimised out>) at /usr/include/sigc++-2.0/sigc++/functors/slot.h:451 ◊56 0x00007ffff776376b in sigc::internal::signal_emit2<void, Inkscape::Selection*, unsigned int, sigc::nil>::emit(sigc::internal::signal_impl*, Inkscape::Selection* const&, unsigned int const&) (_A_a2=@0x7fffffffdbac: 15, _A_a1=@0x7fffffffdbb8: 0x5555559c56c0, impl=0x5555573e0e80) at /usr/include/sigc++-2.0/sigc++/functors/slot_base.h:335 ◊57 sigc::signal2<void, Inkscape::Selection*, unsigned int, sigc::nil>::emit(Inkscape::Selection* const&, unsigned int const&) const (_A_a2=@0x7fffffffdbac: 15, _A_a1=@0x7fffffffdbb8: 0x5555559c56c0, this=0x5555559c58a0) at /usr/include/sigc++-2.0/sigc++/signal.h:3108 ◊58 Inkscape::Selection::_emitModified(unsigned int) (this=0x5555559c56c0, flags=<optimised out>) at ../../src/selection.cpp:103 ◊59 0x00007ffff776387b in Inkscape::Selection::_emit_modified(Inkscape::Selection*) (selection=<optimised out>) at ../../src/selection.cpp:96 ◊60 0x00007ffff607a04e in g_main_dispatch (context=0x555555601350) at ../../../glib/gmain.c:3309 ◊61 g_main_context_dispatch (context=context@entry=0x555555601350) at ../../../glib/gmain.c:3974 ◊62 0x00007ffff607a400 in g_main_context_iterate (context=context@entry=0x555555601350, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimised out>) at ../../../glib/gmain.c:4047 ◊63 0x00007ffff607a4a3 in g_main_context_iteration (context=context@entry=0x555555601350, may_block=may_block@entry=1) at ../../../glib/gmain.c:4108 ◊64 0x00007ffff50a9fe5 in g_application_run (application=0x55555565c210 [gtkmm__GtkApplication], argc=<optimised out>, argv=<optimised out>) at ../../../gio/gapplication.c:2559 ◊65 0x0000555555557364 in main(int, char**) (argc=<optimised out>, argv=<optimised out>) at /usr/include/glibmm-2.4/glibmm/refptr.h:405 (gdb) Quit </pre> </details> #### What should have happened? - no crash. I'm not particularly interested in whether the group succeeds (but don't make it random behavior!) #### Version info - Inkscape 1.3-dev (b8f17c6145, 2022-05-14) Linux Mint 20 - Inkscape 1.2-rc (991492237d, 2022-05-14), but not 1.1.x Bisection points to * ~~inkscape@6e8fec33090def9d700dcea07afcb142d19b0bd8 Improve canvas performance~~ * https://gitlab.com/inkscape/inkscape/-/commit/a5f8da8ba0852ce7cd6e87dd7f8a5bdf3702774a Fix LPE cut/copy/paste LPE * https://gitlab.com/inkscape/inkscape/-/commit/648fb1aa491611f2f0e6714fcfd82e1c6ff3b939 Menubar Object and Command Palette hint squash commit depending on the exact sequence of steps performed (see comment https://gitlab.com/inkscape/inkscape/-/issues/3515#note_946977201 for more details)
issue