After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 756160 - Crash/segfault when dragging tabs (after 2nd/3rd/4th+ drag)
Crash/segfault when dragging tabs (after 2nd/3rd/4th+ drag)
Status: RESOLVED FIXED
Product: gtk+
Classification: Platform
Component: Widget: GtkNotebook
3.18.x
Other Windows
: Normal critical
: ---
Assigned To: gtk-bugs
gtk-bugs
Depends on:
Blocks:
 
 
Reported: 2015-10-07 01:22 UTC by Andrew Chadwick
Modified: 2015-10-17 19:46 UTC
See Also:
GNOME target: ---
GNOME version: ---


Attachments
0001-Revert-GDK-cursor-theme-support-for-win32-backend.patch (41.83 KB, patch)
2015-10-16 23:00 UTC, Andrew Chadwick
none Details | Review
W32: Add missing reference taking in gdk_device_virtual_grab() (1014 bytes, patch)
2015-10-17 08:37 UTC, LRN
committed Details | Review

Description Andrew Chadwick 2015-10-07 01:22:04 UTC
When attempting to drag tabs around in an MSYS2 build of GTK 3.18.0 for the mingw-w64 "MINGW64" and "MINGW32" targets, everything works as it should for the first couple of drags. However after a small number of successful drags, the program segfaults:

------------------------8<------------------------------
$ python notebook-drag-minimal.py

(python.exe:328): Gdk-CRITICAL **: gdk_cursor_get_display: assertion 'GDK_IS_CURSOR (cursor)' failed
Segmentation fault
------------------------>8------------------------------

Sample test code: https://gist.github.com/achadwick/1b3505beb47d65fedfd6
It was originally written for testing a different bug also reported here, but it provokes this one too.

This appears to be Windows-specific: I've not been able to provoke it in Debian unstable's GTK 3.18.0.

The Gdk-CRITICAL does not appear to be directly associated with the crash: it can appear one or more times before the program crashes, in different click-drag-release sequences.

System: Win7, recent MSYS2 install from the most recent installer, msys2-x86_64-20150916, https://msys2.github.io/ fully updated and tested both with and without debug builds of glib, gtk, and gdk.

------------------------8<------------------------------
Test User@win7test MINGW32 /g/MyPaintProject/mypaint
$ gdb -ex r --args python notebook-drag-minimal.py
GNU gdb (GDB) 7.10
[...]
Reading symbols from python...(no debugging symbols found)...done.
Starting program: c:\msys64\mingw32\bin\python.exe notebook-drag-minimal.py
[New Thread 2932.0x1140]
warning: Python failed to load the default activation context
[New Thread 2932.0xf0c]
[New Thread 2932.0x13c0]
[New Thread 2932.0x118c]
[New Thread 2932.0xfd0]
[New Thread 2932.0x1314]

(python.exe:2932): Gdk-CRITICAL **: gdk_cursor_get_display: assertion 'GDK_IS_CURSOR (cursor)' failed

(python.exe:2932): Gdk-CRITICAL **: gdk_cursor_get_display: assertion 'GDK_IS_CURSOR (cursor)' failed

(python.exe:2932): Gdk-CRITICAL **: gdk_cursor_get_display: assertion 'GDK_IS_CURSOR (cursor)' failed

(python.exe:2932): Gdk-CRITICAL **: gdk_cursor_get_display: assertion 'GDK_IS_CURSOR (cursor)' failed

(python.exe:2932): Gdk-CRITICAL **: gdk_cursor_get_display: assertion 'GDK_IS_CURSOR (cursor)' failed

Program received signal SIGSEGV, Segmentation fault.
gtk_css_style_is_static (style=style@entry=0x0) at gtkcssstyle.c:112
112       return GTK_CSS_STYLE_GET_CLASS (style)->is_static (style);
(gdb) bt
  • #0 gtk_css_style_is_static
    at gtkcssstyle.c line 112
  • #1 gtk_css_node_real_update_style
    at gtkcssnode.c line 408
  • #2 gtk_css_transient_node_update_style
    at gtkcsstransientnode.c line 62
  • #3 gtk_css_node_ensure_style
    at gtkcssnode.c line 923
  • #4 gtk_css_node_get_style
    at gtkcssnode.c line 949
  • #5 gtk_style_context_lookup_style
    at gtkstylecontext.c line 501
  • #6 gtk_render_background
    at gtkrender.c line 283
  • #7 gtk_notebook_paint
    at gtknotebook.c line 5436
  • #8 gtk_notebook_draw
    at gtknotebook.c line 2598
  • #9 _gtk_widget_draw_internal
    at gtkwidget.c line 6847
  • #10 _gtk_widget_draw
    at gtkwidget.c line 7025
  • #11 gtk_container_propagate_draw
    at gtkcontainer.c line 3836
  • #12 gtk_container_draw
    at gtkcontainer.c line 3671
  • #13 gtk_grid_draw
    at gtkgrid.c line 1704
  • #14 _gtk_widget_draw_internal
    at gtkwidget.c line 6847
  • #15 _gtk_widget_draw
    at gtkwidget.c line 7025
  • #16 gtk_container_propagate_draw
    at gtkcontainer.c line 3836
  • #17 gtk_container_draw
    at gtkcontainer.c line 3671
  • #18 gtk_window_draw
    at gtkwindow.c line 9852
  • #19 _gtk_widget_draw_internal
    at gtkwidget.c line 6847
  • #20 _gtk_widget_draw_windows
    at gtkwidget.c line 6948
  • #21 _gtk_widget_draw
    at gtkwidget.c line 7019
  • #22 gtk_widget_send_expose
    at gtkwidget.c line 7521
  • #23 gtk_main_do_event
    at gtkmain.c line 1764
  • #24 _gdk_event_emit
    at gdkevents.c line 69
  • #25 _gdk_window_process_updates_recurse_helper
    at gdkwindow.c line 3591
  • #26 _gdk_window_process_updates_recurse
    at gdkwindow.c line 3648
  • #27 gdk_window_impl_process_updates_recurse
    at gdkwindowimpl.c line 46
  • #28 gdk_window_process_updates_internal
    at gdkwindow.c line 3736
  • #29 gdk_window_process_updates_with_mode
    at gdkwindow.c line 3937
  • #30 gdk_window_paint_on_clock
    at gdkwindow.c line 11257
  • #31 g_cclosure_marshal_VOID__VOIDv
    at ../../glib-2.46.0/gobject/gmarshal.c line 905
  • #32 _g_closure_invoke_va
    at ../../glib-2.46.0/gobject/gclosure.c line 864
  • #33 g_signal_emit_valist
    at ../../glib-2.46.0/gobject/gsignal.c line 3292
  • #34 g_signal_emit_by_name
    at ../../glib-2.46.0/gobject/gsignal.c line 3479
  • #35 gdk_frame_clock_paint_idle
    at gdkframeclockidle.c line 430
  • #36 gdk_threads_dispatch
    at gdk.c line 719
  • #37 g_timeout_dispatch
    at ../../glib-2.46.0/glib/gmain.c line 4577
  • #38 g_main_dispatch
    at ../../glib-2.46.0/glib/gmain.c line 3154
  • #39 g_main_context_dispatch
    at ../../glib-2.46.0/glib/gmain.c line 3769
  • #40 g_main_context_iterate
    at ../../glib-2.46.0/glib/gmain.c line 3840
  • #41 g_main_loop_run
    at ../../glib-2.46.0/glib/gmain.c line 4034
  • #42 gtk_main
    at gtkmain.c line 1235
  • #43 ??
    from c:\msys64\mingw32\bin\libffi-6.dll
  • #44 ??
    from c:\msys64\mingw32\bin\libffi-6.dll
  • #45 ??
    from c:\msys64\mingw32\lib\python2.7\site-packages\gi\_gi.pyd
  • #46 ??
    from c:\msys64\mingw32\lib\python2.7\site-packages\gi\_gi.pyd
  • #47 libpython2.7!PyObject_Call
    from c:\msys64\mingw32\bin\libpython2.7.dll
  • #0 gtk_css_style_get_value
    at gtkcssstyle.c line 73
  • #1 gtk_css_animated_style_create_css_transitions
    at gtkcssanimatedstyle.c line 262
  • #2 gtk_css_animated_style_new
    at gtkcssanimatedstyle.c line 435
  • #3 gtk_css_node_real_update_style
    at gtkcssnode.c line 391
  • #4 gtk_css_widget_node_update_style
    at gtkcsswidgetnode.c line 95
  • #5 gtk_css_node_ensure_style
    at gtkcssnode.c line 923
  • #6 gtk_css_node_validate_internal
    at gtkcssnode.c line 1277
  • #7 gtk_css_node_validate_internal
    at gtkcssnode.c line 1291
  • #8 gtk_css_node_validate_internal
    at gtkcssnode.c line 1291
  • #9 gtk_css_node_validate_internal
    at gtkcssnode.c line 1291
  • #10 gtk_css_node_validate
    at gtkcssnode.c line 1302
  • #11 gtk_container_idle_sizer
    at gtkcontainer.c line 2011
  • #12 g_cclosure_marshal_VOID__VOIDv
    at ../../glib-2.46.0/gobject/gmarshal.c line 905
  • #13 _g_closure_invoke_va
    at ../../glib-2.46.0/gobject/gclosure.c line 864
  • #14 g_signal_emit_valist
    at ../../glib-2.46.0/gobject/gsignal.c line 3292
  • #15 g_signal_emit_by_name
    at ../../glib-2.46.0/gobject/gsignal.c line 3479
  • #16 gdk_frame_clock_paint_idle
    at gdkframeclockidle.c line 408
  • #17 gdk_threads_dispatch
    at gdk.c line 719
  • #18 g_timeout_dispatch
    at ../../glib-2.46.0/glib/gmain.c line 4577
  • #19 g_main_dispatch
    at ../../glib-2.46.0/glib/gmain.c line 3154
  • #20 g_main_context_dispatch
    at ../../glib-2.46.0/glib/gmain.c line 3769
  • #21 g_main_context_iterate
    at ../../glib-2.46.0/glib/gmain.c line 3840
  • #22 g_main_loop_run
    at ../../glib-2.46.0/glib/gmain.c line 4034
  • #23 gtk_main
    at gtkmain.c line 1235
  • #24 ??
    from c:\msys64\mingw32\bin\libffi-6.dll
  • #25 ??
    from c:\msys64\mingw32\bin\libffi-6.dll
  • #26 ??
    from c:\msys64\mingw32\lib\python2.7\site-packages\gi\_gi.pyd
  • #27 ??
    from c:\msys64\mingw32\lib\python2.7\site-packages\gi\_gi.pyd
  • #28 libpython2.7!PyObject_Call
    from c:\msys64\mingw32\bin\libpython2.7.dll

I'm using no special themes, just the builtin Adwaita.
Comment 1 Andrew Chadwick 2015-10-07 01:24:16 UTC
Sorry, just to clarify: there are two traces in trace 235548: related area of code, and perhaps related, but different lines.
Comment 2 Andrew Chadwick 2015-10-07 23:30:55 UTC
Another trace, this time from GTK 3.8.1:

Program received signal SIGSEGV, Segmentation fault.
0x0000000070ec3f2d in gdk_cursor_get_display (cursor=0x481ba80)
    at gdkcursor.c:432
432       g_return_val_if_fail (GDK_IS_CURSOR (cursor), NULL);
(gdb) bt
  • #0 gdk_cursor_get_display
    at gdkcursor.c line 432
  • #1 gtk_drag_get_cursor
  • #2 _gtk_drag_source_handle_event
    at gtkdnd.c line 3549
  • #3 gtk_main_do_event
    at gtkmain.c line 1856
  • #4 _gdk_event_emit
    at gdkevents.c line 69
  • #5 gdk_event_dispatch
    at gdkevents-win32.c line 3453
  • #6 g_main_dispatch
    at ../../glib-2.46.0/glib/gmain.c line 3154
  • #7 g_main_context_dispatch
    at ../../glib-2.46.0/glib/gmain.c line 3769
  • #8 g_main_context_iterate
    at ../../glib-2.46.0/glib/gmain.c line 3840
  • #9 g_main_loop_run
    at ../../glib-2.46.0/glib/gmain.c line 4034
  • #10 gtk_main
    at gtkmain.c line 1235
  • #11 ??
    from c:\msys64\mingw64\bin\libffi-6.dll
  • #12 ??
    from c:\msys64\mingw64\bin\libffi-6.dll
  • #13 ??
    from c:\msys64\mingw64\lib\python2.7\site-packages\gi\_gi.pyd
  • #14 ??
    from c:\msys64\mingw64\lib\python2.7\site-packages\gi\_gi.pyd
  • #15 libpython2.7!PyObject_Call
    from c:\msys64\mingw64\bin\libpython2.7.dll
  • #16 libpython2.7!PyEval_EvalFrameEx
    from c:\msys64\mingw64\bin\libpython2.7.dll
  • #17 libpython2.7!PyEval_EvalCodeEx
    from c:\msys64\mingw64\bin\libpython2.7.dll
  • #18 libpython2.7!PyEval_EvalCode
    from c:\msys64\mingw64\bin\libpython2.7.dll
  • #19 libpython2.7!PyGILState_Release
    from c:\msys64\mingw64\bin\libpython2.7.dll
  • #20 libpython2.7!PyRun_FileExFlags
    from c:\msys64\mingw64\bin\libpython2.7.dll
  • #21 libpython2.7!PyRun_SimpleFileExFlags
    from c:\msys64\mingw64\bin\libpython2.7.dll
  • #22 libpython2.7!Py_Main
    from c:\msys64\mingw64\bin\libpython2.7.dll
  • #23 ??
  • #24 ??
  • #25 KERNEL32!BaseThreadInitThunk
    from C:\Windows\system32\kernel32.dll
  • #26 ntdll!RtlUserThreadStart
    from C:\Windows\SYSTEM32\ntdll.dll
  • #27 ??

Comment 3 Andrew Chadwick 2015-10-07 23:35:12 UTC
Sorry, 3.18.1 above: from this PKGBUILD: https://github.com/Alexpux/MINGW-packages/tree/master/mingw-w64-gtk3. Identical symptoms to the original report, but the exception is now happening somewhere else.

And another from my debugging build of 3.18.1:

Program received signal SIGSEGV, Segmentation fault.
g_type_check_instance_is_fundamentally_a (
    type_instance=type_instance@entry=0x486a080,
    fundamental_type=fundamental_type@entry=80)
    at ../../glib-2.46.0/gobject/gtype.c:4028
4028      node = lookup_type_node_I (type_instance->g_class->g_type);
(gdb) bt
  • #0 g_type_check_instance_is_fundamentally_a
    at ../../glib-2.46.0/gobject/gtype.c line 4028
  • #1 g_object_ref
    at ../../glib-2.46.0/gobject/gobject.c line 3045
  • #2 _gdk_win32_display_get_cursor_for_name
    at gdkcursor-win32.c line 697
  • #3 gdk_cursor_new_from_name
    at gdkcursor.c line 299
  • #4 gtk_drag_get_cursor
    at gtkdnd.c line 877
  • #5 _gtk_drag_source_handle_event
    at gtkdnd.c line 3549
  • #6 gtk_main_do_event
    at gtkmain.c line 1856
  • #7 _gdk_event_emit
    at gdkevents.c line 69
  • #8 gdk_event_dispatch
    at gdkevents-win32.c line 3453
  • #9 g_main_dispatch
    at ../../glib-2.46.0/glib/gmain.c line 3154
  • #10 g_main_context_dispatch
    at ../../glib-2.46.0/glib/gmain.c line 3769
  • #11 g_main_context_iterate
    at ../../glib-2.46.0/glib/gmain.c line 3840
  • #12 g_main_loop_run
    at ../../glib-2.46.0/glib/gmain.c line 4034
  • #13 gtk_main
    at gtkmain.c line 1235
  • #14 ??
    from c:\msys64\mingw64\bin\libffi-6.dll
  • #15 ??
    from c:\msys64\mingw64\bin\libffi-6.dll
  • #16 ??
    from c:\msys64\mingw64\lib\python2.7\site-packages\gi\_gi.pyd
  • #17 ??
    from c:\msys64\mingw64\lib\python2.7\site-packages\gi\_gi.pyd
  • #18 libpython2.7!PyObject_Call
    from c:\msys64\mingw64\bin\libpython2.7.dll
  • #19 libpython2.7!PyEval_EvalFrameEx
    from c:\msys64\mingw64\bin\libpython2.7.dll
  • #20 libpython2.7!PyEval_EvalCodeEx
    from c:\msys64\mingw64\bin\libpython2.7.dll
  • #21 libpython2.7!PyEval_EvalCode
    from c:\msys64\mingw64\bin\libpython2.7.dll
  • #22 libpython2.7!PyGILState_Release
    from c:\msys64\mingw64\bin\libpython2.7.dll
  • #23 libpython2.7!PyRun_FileExFlags
    from c:\msys64\mingw64\bin\libpython2.7.dll
  • #24 libpython2.7!PyRun_SimpleFileExFlags
    from c:\msys64\mingw64\bin\libpython2.7.dll
  • #25 libpython2.7!Py_Main
    from c:\msys64\mingw64\bin\libpython2.7.dll
  • #26 ??
  • #27 ??
  • #28 KERNEL32!BaseThreadInitThunk
    from C:\Windows\system32\kernel32.dll
  • #29 ntdll!RtlUserThreadStart
    from C:\Windows\SYSTEM32\ntdll.dll
  • #30 ??


Yet a different function. What's going on here?
Comment 4 Matthias Clasen 2015-10-08 11:06:49 UTC
Here is an idea, maybe the win32 cursor theme support is not quite working as intended ?

https://git.gnome.org/browse/gtk+/commit/?id=26c24328d57aa0c7d727008706c5d4aa46dac9b1
Comment 5 LRN 2015-10-08 13:36:40 UTC
I've had dragging-related problems in my Windows Pidgin builds. If you drag conversation tabs around, it will eventually crash. Like this:

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 6892.0x2010]
g_type_check_instance_cast (type_instance=0x13454520, iface_type=138557904) at gtype.c:4060
4060              node = lookup_type_node_I (type_instance->g_class->g_type);
(gdb) bt
  • #0 g_type_check_instance_cast
    at gtype.c line 4060
  • #1 gdk_device_virtual_grab
    at gdkdevice-virtual.c line 277
  • #2 gdk_device_grab
    at gdkdevice.c line 1364
  • #3 notebook_init_grab
    at ../../pidgin-hg-e8c82e0ec184/pidgin/gtkconv.c line 9277
  • #4 notebook_motion_cb
    at ../../pidgin-hg-e8c82e0ec184/pidgin/gtkconv.c line 9308
  • #5 _gtk_marshal_BOOLEAN__BOXED
    at gtkmarshalers.c line 85
  • #6 g_closure_invoke
    at gclosure.c line 801
  • #7 signal_emit_unlocked_R
    at gsignal.c line 3581
  • #8 g_signal_emit_valist
    at gsignal.c line 3347
  • #9 g_signal_emit
    at gsignal.c line 3393
  • #10 gtk_widget_event_internal
    at gtkwidget.c line 7820
  • #11 propagate_event_up
    at gtkmain.c line 2511
  • #12 propagate_event
    at gtkmain.c line 2613
  • #13 gtk_main_do_event
    at gtkmain.c line 1844
  • #14 _gdk_event_emit
    at gdkevents.c line 69
  • #15 gdk_event_dispatch
    at gdkevents-win32.c line 3514
  • #16 g_main_dispatch
    at gmain.c line 3122
  • #17 g_main_context_dispatch
    at gmain.c line 3737
  • #18 g_main_context_iterate
    at gmain.c line 3808
  • #19 g_main_loop_run
    at gmain.c line 4002
  • #20 gtk_main
    at gtkmain.c line 1235
  • #21 pidgin_start
    at ../../pidgin-hg-e8c82e0ec184/pidgin/libpidgin.c line 869
  • #22 pidgin_main
    at ../../pidgin-hg-e8c82e0ec184/pidgin/pidgin.c line 58
  • #23 WinMain
    at ../../pidgin-hg-e8c82e0ec184/pidgin/win32/winpidgin.c line 873
  • #24 main
    at ../mingw-w64-crt-git-8bbe98a687b6aff31fe1253390d164c1590a4254/crt/crt0_c.c line 18
  • #1 gdk_device_virtual_grab
    at gdkdevice-virtual.c line 277

(gdb) p *impl->cursor
$6 = {parent_instance = {g_type_instance = {g_class = 0x7653f80}, ref_count = 1108, qdata = 0x0}, display = 0x55ce000, type = GDK_LEFT_PTR}
(gdb) p *(GdkWin32Cursor*) impl->cursor
$7 = {cursor = {parent_instance = {g_type_instance = {g_class = 0x7653f80}, ref_count = 1108, qdata = 0x0}, display = 0x55ce000, type = GDK_LEFT_PTR}, name = 0x85e2188 "left_ptr", hcursor = 0x10003}

Object appears to be correct (hcursor and name members look plausible), not sure what the problem is with g_class.
Comment 6 Andrew Chadwick 2015-10-08 22:00:40 UTC
I can confirm that merely reverting 26c24328d57aa0c7d727008706c5d4aa46dac9b1 *does not* fix the crashes seen when dragging tabs. From an MSYS2 mingw-w64-x86_64-gtk3-3.18.1-1 rebuilt with its *-debug buddy and a reverter patch for that commit grafted in locally:

$ gdb -ex r --args python notebook-drag-minimal.py
GNU gdb (GDB) 7.10
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-w64-mingw32".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from python...(no debugging symbols found)...done.
Starting program: c:\msys64\mingw64\bin\python.exe notebook-drag-minimal.py
[New Thread 3360.0x1194]
[New Thread 3360.0x1338]
[New Thread 3360.0xc58]
[New Thread 3360.0xed4]
[New Thread 3360.0x13ec]
[New Thread 3360.0xf94]

Program received signal SIGSEGV, Segmentation fault.
gtk_css_style_is_static (style=style@entry=0x0) at gtkcssstyle.c:114
114       return GTK_CSS_STYLE_GET_CLASS (style)->is_static (style);
(gdb) bt
  • #0 gtk_css_style_is_static
    at gtkcssstyle.c line 114
  • #1 gtk_css_node_real_update_style
    at gtkcssnode.c line 408
  • #2 gtk_css_transient_node_update_style
    at gtkcsstransientnode.c line 62
  • #3 gtk_css_node_ensure_style
    at gtkcssnode.c line 923
  • #4 gtk_css_node_get_style
    at gtkcssnode.c line 949
  • #5 gtk_style_context_lookup_style
    at gtkstylecontext.c line 501
  • #6 gtk_style_context_get_padding
  • #7 gtk_notebook_get_preferred_tabs_size
    at gtknotebook.c line 2098
  • #8 gtk_notebook_size_request
    at gtknotebook.c line 2335
  • #9 gtk_notebook_get_preferred_height
    at gtknotebook.c line 2443
  • #10 gtk_widget_query_size_for_orientation
    at gtksizerequest.c line 217
  • #11 gtk_widget_compute_size_for_orientation
    at gtksizerequest.c line 389
  • #12 gtk_widget_get_preferred_height_and_baseline_for_width
    at gtksizerequest.c line 632
  • #13 compute_request_for_child
    at gtkgrid.c line 699
  • #14 gtk_grid_request_non_spanning
    at gtkgrid.c line 739
  • #15 gtk_grid_request_run
    at gtkgrid.c line 1147
  • #16 gtk_grid_get_size
    at gtkgrid.c line 1453
  • #17 gtk_grid_get_preferred_height_and_baseline_for_width
    at gtkgrid.c line 1570
  • #18 gtk_widget_query_size_for_orientation
    at gtksizerequest.c line 213
  • #19 gtk_widget_compute_size_for_orientation
    at gtksizerequest.c line 389
  • #20 gtk_widget_get_preferred_height
    at gtksizerequest.c line 517
  • #21 gtk_window_get_preferred_height
    at gtkwindow.c line 8520
  • #22 gtk_widget_query_size_for_orientation
    at gtksizerequest.c line 217
  • #23 gtk_widget_compute_size_for_orientation
    at gtksizerequest.c line 389
  • #24 gtk_widget_get_preferred_height_and_baseline_for_width
    at gtksizerequest.c line 632
  • #25 _gtk_widget_get_preferred_size_and_baseline
    at gtksizerequest.c line 693
  • #26 gtk_widget_get_preferred_size
    at gtksizerequest.c line 740
  • #27 gtk_window_compute_hints
    at gtkwindow.c line 9628
  • #28 gtk_window_compute_configure_request
    at gtkwindow.c line 8966
  • #29 gtk_window_move_resize
    at gtkwindow.c line 9196
  • #30 gtk_window_check_resize
    at gtkwindow.c line 8124
  • #31 ??
    from c:\msys64\mingw64\bin\libgobject-2.0-0.dll
  • #32 ??
    from c:\msys64\mingw64\bin\libgobject-2.0-0.dll
  • #33 ??
    from c:\msys64\mingw64\bin\libgobject-2.0-0.dll
  • #34 gtk_container_check_resize
    at gtkcontainer.c line 2192
  • #35 gtk_container_idle_sizer
    at gtkcontainer.c line 2026
  • #36 ??
    from c:\msys64\mingw64\bin\libgobject-2.0-0.dll
  • #37 ??
    from c:\msys64\mingw64\bin\libgobject-2.0-0.dll
  • #38 ??
    from c:\msys64\mingw64\bin\libgobject-2.0-0.dll
  • #39 gdk_frame_clock_paint_idle
    at gdkframeclockidle.c line 408
  • #40 gdk_threads_dispatch
    at gdk.c line 719
  • #41 ??
    from c:\msys64\mingw64\bin\libglib-2.0-0.dll
  • #42 ??
    from c:\msys64\mingw64\bin\libglib-2.0-0.dll
  • #43 ??
    from c:\msys64\mingw64\bin\libglib-2.0-0.dll
  • #44 ??
    from c:\msys64\mingw64\bin\libglib-2.0-0.dll
  • #45 gtk_main
    at gtkmain.c line 1235
  • #46 ??
    from c:\msys64\mingw64\bin\libffi-6.dll
  • #47 ??
    from c:\msys64\mingw64\bin\libffi-6.dll
  • #48 ??
    from c:\msys64\mingw64\lib\python2.7\site-packages\gi\_gi.pyd
  • #49 ??
    from c:\msys64\mingw64\lib\python2.7\site-packages\gi\_gi.pyd
  • #50 libpython2.7!PyObject_Call
    from c:\msys64\mingw64\bin\libpython2.7.dll
  • #51 libpython2.7!PyEval_EvalFrameEx
    from c:\msys64\mingw64\bin\libpython2.7.dll
  • #52 libpython2.7!PyEval_EvalCodeEx
    from c:\msys64\mingw64\bin\libpython2.7.dll
  • #53 libpython2.7!PyEval_EvalCode
    from c:\msys64\mingw64\bin\libpython2.7.dll
  • #54 libpython2.7!PyGILState_Release
    from c:\msys64\mingw64\bin\libpython2.7.dll
  • #55 libpython2.7!PyRun_FileExFlags
    from c:\msys64\mingw64\bin\libpython2.7.dll
  • #56 libpython2.7!PyRun_SimpleFileExFlags
    from c:\msys64\mingw64\bin\libpython2.7.dll
  • #57 libpython2.7!Py_Main
    from c:\msys64\mingw64\bin\libpython2.7.dll
  • #58 ??
  • #59 ??
  • #60 KERNEL32!BaseThreadInitThunk
    from C:\Windows\system32\kernel32.dll
  • #61 ntdll!RtlUserThreadStart
    from C:\Windows\SYSTEM32\ntdll.dll
  • #62 ??
  • #1 gtk_css_node_real_update_style
    at gtkcssnode.c line 408
  • #2 gtk_css_transient_node_update_style
    at gtkcsstransientnode.c line 62
57                                           GtkCssChange  change,
58                                           gint64        timestamp,
59                                           GtkCssStyle  *style)
60      {
61        /* This should get rid of animations */
62        return GTK_CSS_NODE_CLASS (gtk_css_transient_node_parent_class)->update_style (cssnode, change, 0, style);
63      }
64
65      static void
66      gtk_css_transient_node_class_init (GtkCssTransientNodeClass *klass)
(gdb) q

Not sure what I'm looking for here, sorry. It doesn't look cursor-related, however.
Comment 7 Andrew Chadwick 2015-10-14 11:25:16 UTC
This is still happening in 3.18.2:

$ gdb -ex r --args python ./notebook-drag-minimal.py
GNU gdb (GDB) 7.10
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-w64-mingw32".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from python...(no debugging symbols found)...done.
Starting program: c:\msys64\mingw64\bin\python.exe ./notebook-drag-minimal.py
[New Thread 3208.0xcc8]
[New Thread 3208.0x1534]
[New Thread 3208.0x15ac]
[New Thread 3208.0x1108]
[New Thread 3208.0x1708]

Program received signal SIGSEGV, Segmentation fault.
g_type_check_instance_is_fundamentally_a (
    type_instance=type_instance@entry=0x3cd0680,
    fundamental_type=fundamental_type@entry=80)
    at ../../glib-2.46.0/gobject/gtype.c:4028
4028      node = lookup_type_node_I (type_instance->g_class->g_type);
(gdb) bt
  • #0 g_type_check_instance_is_fundamentally_a
    at ../../glib-2.46.0/gobject/gtype.c line 4028
  • #1 g_object_unref
    at ../../glib-2.46.0/gobject/gobject.c line 3076
  • #2 gtk_drag_get_cursor
    at gtkdnd.c line 858
  • #3 gtk_drag_begin_internal
    at gtkdnd.c line 2403
  • #4 gtk_drag_begin_with_coordinates
    at gtkdnd.c line 2637
  • #5 gtk_notebook_motion_notify
    at gtknotebook.c line 3495
  • #6 _gtk_marshal_BOOLEAN__BOXEDv
    at gtkmarshalers.c line 131
  • #7 g_type_class_meta_marshalv
    at ../../glib-2.46.0/gobject/gclosure.c line 1021
  • #8 _g_closure_invoke_va
    at ../../glib-2.46.0/gobject/gclosure.c line 864
  • #9 g_signal_emit_valist
    at ../../glib-2.46.0/gobject/gsignal.c line 3292
  • #10 g_signal_emit
    at ../../glib-2.46.0/gobject/gsignal.c line 3439
  • #11 gtk_widget_event_internal
    at gtkwidget.c line 7692
  • #12 gtk_widget_event
    at gtkwidget.c line 7256
  • #13 propagate_event_up
    at gtkmain.c line 2517
  • #14 propagate_event
    at gtkmain.c line 2619
  • #15 gtk_propagate_event
    at gtkmain.c line 2654
  • #16 gtk_main_do_event
    at gtkmain.c line 1850
  • #17 _gdk_event_emit
    at gdkevents.c line 69
  • #18 gdk_event_dispatch
    at gdkevents-win32.c line 3453
  • #19 g_main_dispatch
    at ../../glib-2.46.0/glib/gmain.c line 3154
  • #20 g_main_context_dispatch
    at ../../glib-2.46.0/glib/gmain.c line 3769
  • #21 g_main_context_iterate
    at ../../glib-2.46.0/glib/gmain.c line 3840
  • #22 g_main_loop_run
    at ../../glib-2.46.0/glib/gmain.c line 4034
  • #23 gtk_main
    at gtkmain.c line 1241
  • #24 ??
    from c:\msys64\mingw64\bin\libffi-6.dll
  • #25 ??
    from c:\msys64\mingw64\bin\libffi-6.dll
  • #26 ??
    from c:\msys64\mingw64\lib\python2.7\site-packages\gi\_gi.pyd
  • #27 ??
    from c:\msys64\mingw64\lib\python2.7\site-packages\gi\_gi.pyd
  • #28 libpython2.7!PyObject_Call
    from c:\msys64\mingw64\bin\libpython2.7.dll
  • #29 libpython2.7!PyEval_EvalFrameEx
    from c:\msys64\mingw64\bin\libpython2.7.dll
  • #30 libpython2.7!PyEval_EvalCodeEx
    from c:\msys64\mingw64\bin\libpython2.7.dll
  • #31 libpython2.7!PyEval_EvalCode
    from c:\msys64\mingw64\bin\libpython2.7.dll
  • #32 libpython2.7!PyGILState_Release
    from c:\msys64\mingw64\bin\libpython2.7.dll
  • #33 libpython2.7!PyRun_FileExFlags
    from c:\msys64\mingw64\bin\libpython2.7.dll
  • #34 libpython2.7!PyRun_SimpleFileExFlags
    from c:\msys64\mingw64\bin\libpython2.7.dll
  • #35 libpython2.7!Py_Main
    from c:\msys64\mingw64\bin\libpython2.7.dll
  • #36 ??
  • #37 ??
  • #38 KERNEL32!BaseThreadInitThunk
    from C:\Windows\system32\kernel32.dll
  • #39 ntdll!RtlUserThreadStart
    from C:\Windows\SYSTEM32\ntdll.dll
  • #40 ??

Comment 8 Andrew Chadwick 2015-10-14 15:29:50 UTC
It's easy to test with tests/testnotebookdnd.exe too:



In gdk_cursor_get_display():


$ gdb -ex r --args testnotebookdnd.exe
GNU gdb (GDB) 7.10
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-w64-mingw32".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from testnotebookdnd.exe...done.
Starting program: G:\MyPaintProject\mypaint\testnotebookdnd.exe
[New Thread 4516.0xa84]
[New Thread 4516.0xa90]
[New Thread 4516.0x1558]
[New Thread 4516.0x17f4]
[New Thread 4516.0xcec]
page 3 reordered

(testnotebookdnd.exe:4516): GLib-GObject-CRITICAL **: g_object_ref: assertion 'G_IS_OBJECT (object)' failed
page 2 reordered

(testnotebookdnd.exe:4516): GLib-GObject-CRITICAL **: g_object_ref: assertion 'G_IS_OBJECT (object)' failed
page 1 reordered

(testnotebookdnd.exe:4516): GLib-GObject-CRITICAL **: g_object_unref: assertion 'G_IS_OBJECT (object)' failed


Program received signal SIGSEGV, Segmentation fault.
0x0000000070ec3f2d in gdk_cursor_get_display (cursor=0x3f8dd00)
    at gdkcursor.c:432
432       g_return_val_if_fail (GDK_IS_CURSOR (cursor), NULL);
(gdb) (gdb)
(gdb) bt
  • #0 gdk_cursor_get_display
    at gdkcursor.c line 432
  • #1 gtk_drag_get_cursor
  • #2 _gtk_drag_source_handle_event
    at gtkdnd.c line 3549
  • #3 gtk_main_do_event
    at gtkmain.c line 1862
  • #4 _gdk_event_emit
    at gdkevents.c line 69
  • #5 gdk_event_dispatch
    at gdkevents-win32.c line 3453
  • #6 g_main_dispatch
    at ../../glib-2.46.0/glib/gmain.c line 3154
  • #7 g_main_context_dispatch
    at ../../glib-2.46.0/glib/gmain.c line 3769
  • #8 g_main_context_iterate
    at ../../glib-2.46.0/glib/gmain.c line 3840
  • #9 g_main_loop_run
    at ../../glib-2.46.0/glib/gmain.c line 4034
  • #10 gtk_main
    at gtkmain.c line 1241
  • #11 main
  • #0 _gtk_style_animation_is_static
    at gtkstyleanimation.c line 105
  • #1 gtk_css_animated_style_is_static
    at gtkcssanimatedstyle.c line 74
  • #2 gtk_css_style_is_static
    at gtkcssstyle.c line 114
  • #3 gtk_css_node_invalidate_timestamp
    at gtkcssnode.c line 1209
  • #4 gtk_css_node_invalidate_timestamp
    at gtkcssnode.c line 1214
  • #5 gtk_css_node_invalidate_timestamp
    at gtkcssnode.c line 1214
  • #6 gtk_css_node_invalidate_timestamp
    at gtkcssnode.c line 1214
  • #7 gtk_css_node_invalidate_timestamp
    at gtkcssnode.c line 1214
  • #8 gtk_css_node_invalidate_frame_clock
    at gtkcssnode.c line 1226
  • #9 gtk_css_widget_node_queue_callback
    at gtkcsswidgetnode.c line 71
  • #10 gtk_widget_on_frame_clock_update
    at gtkwidget.c line 5156
  • #11 g_cclosure_marshal_VOID__VOIDv
    at ../../glib-2.46.0/gobject/gmarshal.c line 905
  • #12 _g_closure_invoke_va
    at ../../glib-2.46.0/gobject/gclosure.c line 864
  • #13 g_signal_emit_valist
    at ../../glib-2.46.0/gobject/gsignal.c line 3292
  • #14 g_signal_emit_by_name
    at ../../glib-2.46.0/gobject/gsignal.c line 3479
  • #15 gdk_frame_clock_paint_idle
    at gdkframeclockidle.c line 380
  • #16 gdk_threads_dispatch
    at gdk.c line 719
  • #17 g_timeout_dispatch
    at ../../glib-2.46.0/glib/gmain.c line 4577
  • #18 g_main_dispatch
    at ../../glib-2.46.0/glib/gmain.c line 3154
  • #19 g_main_context_dispatch
    at ../../glib-2.46.0/glib/gmain.c line 3769
  • #20 g_main_context_iterate
    at ../../glib-2.46.0/glib/gmain.c line 3840
  • #21 g_main_loop_run
    at ../../glib-2.46.0/glib/gmain.c line 4034
  • #22 gtk_main
    at gtkmain.c line 1241
  • #23 main
  • #0 g_type_check_instance_is_fundamentally_a
    at ../../glib-2.46.0/gobject/gtype.c line 4028
  • #1 g_object_unref
    at ../../glib-2.46.0/gobject/gobject.c line 3076
  • #2 gtk_drag_get_cursor
    at gtkdnd.c line 858
  • #3 gtk_drag_begin_internal
    at gtkdnd.c line 2403
  • #4 gtk_drag_begin_with_coordinates
    at gtkdnd.c line 2637
  • #5 gtk_notebook_motion_notify
    at gtknotebook.c line 3495
  • #6 _gtk_marshal_BOOLEAN__BOXEDv
    at gtkmarshalers.c line 131
  • #7 g_type_class_meta_marshalv
    at ../../glib-2.46.0/gobject/gclosure.c line 1021
  • #8 _g_closure_invoke_va
    at ../../glib-2.46.0/gobject/gclosure.c line 864
  • #9 g_signal_emit_valist
    at ../../glib-2.46.0/gobject/gsignal.c line 3292
  • #10 g_signal_emit
    at ../../glib-2.46.0/gobject/gsignal.c line 3439
  • #11 gtk_widget_event_internal
    at gtkwidget.c line 7692
  • #12 gtk_widget_event
    at gtkwidget.c line 7256
  • #13 propagate_event_up
    at gtkmain.c line 2517
  • #14 propagate_event
    at gtkmain.c line 2619
  • #15 gtk_propagate_event
    at gtkmain.c line 2654
  • #16 gtk_main_do_event
    at gtkmain.c line 1850
  • #17 _gdk_event_emit
    at gdkevents.c line 69
  • #18 gdk_event_dispatch
    at gdkevents-win32.c line 3453
  • #19 g_main_dispatch
    at ../../glib-2.46.0/glib/gmain.c line 3154
  • #20 g_main_context_dispatch
    at ../../glib-2.46.0/glib/gmain.c line 3769
  • #21 g_main_context_iterate
    at ../../glib-2.46.0/glib/gmain.c line 3840
  • #22 g_main_loop_run
    at ../../glib-2.46.0/glib/gmain.c line 4034
  • #23 gtk_main
    at gtkmain.c line 1241
  • #24 main

Comment 9 Andrew Chadwick 2015-10-15 13:10:49 UTC
Should mention that 3.16.6 is *I think* free of this bug.

From LRN on IRC, for anyone with more gdb-fu than me right now:

<LRN> well, i've been thinking a bit about this
<LRN> it's difficult to debug
* tristan has quit (Connection reset by peer)
<LRN> the only thing i can think of is: 1) find an easy way to reproduce it (as little code as possible and as little user actions as possible)
<LRN> 2) find where it crashes
 3) set up a breakpoint where it crashes
 4) break on the breakpoint, observe the values that could be the source of the crash
 5) disable the breakpoint
 6) let it crash
<LRN> 7) observe the values at the moment of crashing, compare with previous observations
 8) redo the process, putting a watchpoint at the value that changed (and caused the crash) during (4)
 hopefully, watchpoint will trigger when the value that caused the crash changes
 bisecting could work as well, but only if there is a version that is known to work
<LRN> (for all i know this bug could have been there for years)
 (it is implied that between (5) and (7) the point of crash is visited multiple times without crashing)
 from the backtraces it seems that the crash point is somehow related to the type system
Comment 10 Andrew Chadwick 2015-10-15 13:36:45 UTC
Another datapoint when testing (with glib2 2.46.1 and gtk3 3.18.2): To reproduce, you have to drag the tab out of its parent notebook. Moving the tab carefully within its parent notebook so that the drag preview "icon" is not displayed at the pointer at any point does not crash the program.
Comment 11 Andrew Chadwick 2015-10-16 19:54:57 UTC
Bisecting done.

Looks like 641fbd86d796bb0f7838b1d7387031a106386439 and probably 26c24328d57aa0c7d727008706c5d4aa46dac9b1 too need to be reverted.

-------------------------------------8<-------------------------------

Test User@win7test MINGW64 /usr/src/gtk+
$ git bisect good
641fbd86d796bb0f7838b1d7387031a106386439 is the first bad commit
commit 641fbd86d796bb0f7838b1d7387031a106386439
Author: Руслан Ижбулатов <lrn1986@gmail.com>
Date:   Sun May 3 21:29:35 2015 +0000

    GDK: Use GdkCursor objects to keep track of W32 cursors, not HCURSOR

    In particular this means that cursors are disposed of by the way of
    g_object_unref(), not DestroyCursor (which is documented to not to be
    used on certain kinds of cursors, and we can't tell which is which).

    It should also alleviate any concerns about destroying cursors that
    are still in use by other windows, except for cases where we would
    somehow get our hands on a HCURSOR that someone else is using and we
    make a GdkCursor out of it and later unref and finalize it while it
    is still in use.

    It also removes the need to call CopyCursor(), which makes animated
    cursors into non-animated ones as a side-effect (supposed to be a bug,
    but try explaining that to MS). Now cursors should be animated (if
    the are set up as such in the OS).

    https://bugzilla.gnome.org/show_bug.cgi?id=697477

:040000 040000 d28077ec0efd62b2a03ed33ad57fa83d05ab2457 a1bb0ab6d6b6729b01d7193c5a8d6eda4dfeb089 M      gdk


-------------------------------------8<-------------------------------

$ git bisect log
git bisect start
# bad: [294dd9757af8d27cf2f68cd5a38b2849bedfbf8f] 3.18.0
git bisect bad 294dd9757af8d27cf2f68cd5a38b2849bedfbf8f
# bad: [faeaa2f91ee9561f36cc6f66df6bdeb46eb16f88] 3.17.9
git bisect bad faeaa2f91ee9561f36cc6f66df6bdeb46eb16f88
# good: [06984006a5749ae39772a156e6b1ec29bd1fb919] 3.17.1
git bisect good 06984006a5749ae39772a156e6b1ec29bd1fb919
# bad: [7db399d975b8f9626c21761dde5f2d5feeb6e305] placessidebar: add Other Locations item
git bisect bad 7db399d975b8f9626c21761dde5f2d5feeb6e305
# bad: [995e87322c01d22290e122a88d8d1ff3091ce1a3] file chooser: Remove some obsoltete code
git bisect bad 995e87322c01d22290e122a88d8d1ff3091ce1a3
# bad: [d3212c9b46cba09ec2c0ea2f9c02d9a92acbbc45] Updated Hungarian translation
git bisect bad d3212c9b46cba09ec2c0ea2f9c02d9a92acbbc45
# bad: [c207b8d36341d320ca3bf88ece63d2721a63c7b6] Bump Pango requirement
git bisect bad c207b8d36341d320ca3bf88ece63d2721a63c7b6
# bad: [833dbd65cd582346aa52e7dbb122e0e709cd3b7b] Trivial: Use a convenience macro
git bisect bad 833dbd65cd582346aa52e7dbb122e0e709cd3b7b
# good: [7d83edd4e01b34e83474f8b8b49d3e6c3acb610d] Update docs
git bisect good 7d83edd4e01b34e83474f8b8b49d3e6c3acb610d
# good: [f6d021512a3d076c8a559e52ea1d1c84ff5c4154] GtkWindow: Don't assume no shadow width even when not supported
git bisect good f6d021512a3d076c8a559e52ea1d1c84ff5c4154
# bad: [fe6e5d3116fcf5c812534d7344e3aa3cfc5f6e1c] 3.17.2
git bisect bad fe6e5d3116fcf5c812534d7344e3aa3cfc5f6e1c
# bad: [f00214e92206117a85b933745f89e5c998024c3d] scrolledwindow: reset more Indicator state on ::unmap
git bisect bad f00214e92206117a85b933745f89e5c998024c3d
# bad: [2ba7977114776de22afbba6b8ec61d0fe8c57a2d] gtk3-demo: Fix Visual Studio Builds
git bisect bad 2ba7977114776de22afbba6b8ec61d0fe8c57a2d
# good: [4e9be39518edbd1cbaa5959598d43d8415a32195] wayland: Add global object depedency tracking
git bisect good 4e9be39518edbd1cbaa5959598d43d8415a32195
# bad: [641fbd86d796bb0f7838b1d7387031a106386439] GDK: Use GdkCursor objects to keep track of W32 cursors, not HCURSOR
git bisect bad 641fbd86d796bb0f7838b1d7387031a106386439
# good: [7fef713224583ab906d0875eedcf7a76534eff0f] wayland: Use on globals closure for loading cursor themes
git bisect good 7fef713224583ab906d0875eedcf7a76534eff0f
# first bad commit: [641fbd86d796bb0f7838b1d7387031a106386439] GDK: Use GdkCursor objects to keep track of W32 cursors, not HCURSOR
Comment 12 Andrew Chadwick 2015-10-16 21:10:59 UTC
Testing was of necessity done with https://git.gnome.org/browse/gtk+/commit/?id=9fbd71394c172d783422622d9acd32c68d748701 applied at points before it hit master in order to run tests/testnotebookdnd.exe, so I'm testing a reverter for those two commits on top of the current HEAD just to be sure.
Comment 13 Andrew Chadwick 2015-10-16 23:00:47 UTC
Created attachment 313502 [details] [review]
0001-Revert-GDK-cursor-theme-support-for-win32-backend.patch

Patch against recent master attached that reverts the recent changes to support cursor themes. I've tested that it resolves this issue, but it's a pretty ugly and wasteful way of fixing this relatively obscure bug :(

Anyone else able to analyse the real problem here and fix this issue more subtly?
Comment 14 LRN 2015-10-17 08:05:26 UTC
Reproduced the crash in testnotebookdnd. It was due to w32 version of gdkdevice-virtual not getting a reference on a cursor it uses. Will upload a patch shortly.
Comment 15 LRN 2015-10-17 08:37:04 UTC
Created attachment 313519 [details] [review]
W32: Add missing reference taking in gdk_device_virtual_grab()
Comment 16 Paolo Borelli 2015-10-17 16:25:39 UTC
Review of attachment 313519 [details] [review]:

Marking as accepted on behalf of nacho who is sitting next to me without a pc
Comment 17 LRN 2015-10-17 16:40:51 UTC
Comment on attachment 313519 [details] [review]
W32: Add missing reference taking in gdk_device_virtual_grab()

Attachment 313519 [details] pushed as 00b39e4 - W32: Add missing reference taking in gdk_device_virtual_grab()
Comment 18 Andrew Chadwick 2015-10-17 19:46:42 UTC
Confirm that this is fixed in gtk+ master as of 25483304cdc967c374a435200416affb573583f8. Thanks, everyone!