Access Violation during DnD on Windows
Windows 10 x64, GTK 4.12.4 under MSYS2
Source to reproduce:
#include <gtk/gtk.h>
static GdkContentProvider* on_drag_prepare(
GtkDragSource *source,
double x,
double y,
void *none)
{
return gdk_content_provider_new_typed (G_TYPE_STRING, "lalala");
}
static void activate (GtkApplication* app, gpointer user_data)
{
GtkWidget *window = gtk_application_window_new (app);
gtk_window_set_title (GTK_WINDOW (window), "DnD bug");
GtkDragSource *drag_source = gtk_drag_source_new ();
g_signal_connect (drag_source, "prepare", G_CALLBACK (on_drag_prepare), NULL);
gtk_widget_add_controller (GTK_WIDGET (window), GTK_EVENT_CONTROLLER (drag_source));
gtk_window_present (GTK_WINDOW (window));
}
int main(int argc, char **argv)
{
GtkApplication *app = gtk_application_new ("org.gtk.example", G_APPLICATION_DEFAULT_FLAGS);
g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
int status = g_application_run (G_APPLICATION (app), argc, argv);
g_object_unref (app);
return status;
}
How to reproduce:
- Run in debugger (gdb for example). This is important! The bug is racy and nothing happens without debugger
- Do fast and short DnD moves in application window several times.
Unfortunately I have no idea how to get useful stack trace under MSYS2 (( So bt full
gets only this:
Thread 12 "GDK Win32 DnD Thread" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 14992.0x3a98]
0x00007ffc00b10ad5 in ?? () from E:\Development\vscode\tools\msys64\mingw64\bin\libgtk-4-1.dll
#0 0x00007ffc00b10ad5 in ?? () from E:\Development\vscode\tools\msys64\mingw64\bin\libgtk-4-1.dll
No symbol table info available.
#1 0x00007ffc00b10f54 in ?? () from E:\Development\vscode\tools\msys64\mingw64\bin\libgtk-4-1.dll
No symbol table info available.
#2 0x00007ffc624ac61e in ole32!OleGetPackageClipboardOwner () from C:\Windows\System32\ole32.dll
No symbol table info available.
#3 0x00007ffc624ad06c in ole32!DoDragDrop () from C:\Windows\System32\ole32.dll
No symbol table info available.
#4 0x00007ffc00b11a7c in ?? () from E:\Development\vscode\tools\msys64\mingw64\bin\libgtk-4-1.dll
No symbol table info available.
#5 0x00007ffc248a2151 in ?? () from E:\Development\vscode\tools\msys64\mingw64\bin\libglib-2.0-0.dll
No symbol table info available.
#6 0x00007ffc248d6a57 in ?? () from E:\Development\vscode\tools\msys64\mingw64\bin\libglib-2.0-0.dll
No symbol table info available.
#7 0x00007ffc6426af5a in msvcrt!_beginthreadex () from C:\Windows\System32\msvcrt.dll
No symbol table info available.
#8 0x00007ffc6426b02c in msvcrt!_endthreadex () from C:\Windows\System32\msvcrt.dll
No symbol table info available.
#9 0x00007ffc63af7344 in KERNEL32!BaseThreadInitThunk () from C:\Windows\System32\kernel32.dll
No symbol table info available.
#10 0x00007ffc643626b1 in ntdll!RtlUserThreadStart () from C:\Windows\SYSTEM32\ntdll.dll
No symbol table info available.
#11 0x0000000000000000 in ?? ()
No symbol table info available.
PS: I need a hint on how to get a full stacktrace
PPS: Same behavior is for gtk4-demo
application under debugger in "Drag-and-Drop" window