Skip to content

gtkdnd: Fix critical warnings and/or crashes when using GtkSocket/GtkPlug

Gaël Bonithon requested to merge neyfag/gtk:dnd-fixes into gtk-3-24

I had critical warnings and sometimes crashes that I couldn't get rid of downstream, and I finally convinced myself that the bug was upstream.

Example of a backtrace after a dnd in an Xfce panel plugin (GtkSocket/GtkPlug), after the five-minute timeout (DROP_ABORT_TIME):

Core was generated by `/opt/bin/xfce4-panel.orig'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x00007f8c3178210b in gtk_drag_finish (context=0x1, success=0, del=0, time=834468416) at ../gtk/gtk/gtkdnd.c:961
961	  g_return_if_fail (GDK_IS_DRAG_CONTEXT (context));
[Current thread is 1 (Thread 0x7f8c2fa22a00 (LWP 219147))]
(gdb) bt
#0  0x00007f8c3178210b in gtk_drag_finish (context=0x1, success=0, del=0, time=834468416) at ../gtk/gtk/gtkdnd.c:961
#1  0x00007f8c31787750 in gtk_drag_drop_finished (info=0x56485980a8c0, result=result@entry=GTK_DRAG_RESULT_TIMEOUT_EXPIRED, time=<optimized out>) at ../gtk/gtk/gtkdnd.c:2591
#2  0x00007f8c3178796d in gtk_drag_abort_timeout (data=<optimized out>) at ../gtk/gtk/gtkdnd.c:3269
#3  0x00007f8c31c246ae in gdk_threads_dispatch (data=0x5648597dcfa0, data@entry=<error reading variable: value has been optimized out>) at ../gtk/gdk/gdk.c:769
#4  0x00007f8c30f6b3ee in g_timeout_dispatch (source=0x564859830d00, callback=<optimized out>, user_data=<optimized out>) at ../glib/glib/gmain.c:5121
#5  0x00007f8c30f69f69 in g_main_dispatch (context=0x5648592eb820) at ../glib/glib/gmain.c:3476
#6  0x00007f8c30fc8367 in g_main_context_dispatch_unlocked (context=0x5648592eb820) at ../glib/glib/gmain.c:4284
#7  g_main_context_iterate_unlocked.isra.0 (context=0x5648592eb820, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/glib/gmain.c:4349
#8  0x00007f8c30f6ab97 in g_main_loop_run (loop=0x5648593b9f50) at ../glib/glib/gmain.c:4551
#9  0x00007f8c315ecf6f in gtk_main () at ../gtk/gtk/gtkmain.c:1329
#10 0x0000564857c8112e in main (argc=<optimized out>, argv=<optimized out>) at main.c:399

This is fixed by the second commit. The first commit fixes a critical warning of lesser consequence.

Edited by Gaël Bonithon

Merge request reports