Windows: Application crash on startup
Steps to reproduce
- Build GTK4 for x86 using MSVC (from Visual Studio 2017)
- Run gtk4-demo.exe
Reproduces on all examples.
Version information
Backtrace
(456c.1d78): Access violation - code c0000005 (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
eax=77e62e4a ebx=510149f2 ecx=79230c1c edx=0000331c esi=045b6068 edi=05141328
eip=7926cc60 esp=0097f21c ebp=00010002 iopl=0 nv up ei pl nz na po nc
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00010202
gtk_4_1!gdk_win32_gl_context_wgl_realize+0x380:
7926cc60 896814 mov dword ptr [eax+14h],ebp ds:002b:77e62e5e=e6c03815
0:000> k
# ChildEBP RetAddr
00 0097f278 79230c1c gtk_4_1!gdk_win32_gl_context_wgl_realize+0x380 [[..]\git\gtk\gdk\win32\gdkglcontext-win32-wgl.c @ 594]
01 0097f28c 7923d720 gtk_4_1!gdk_gl_context_realize+0x3c [[..]\git\gtk\gdk\gdkglcontext.c @ 1485]
02 (Inline) -------- gtk_4_1!gdk_display_init_gl+0x65 [[..]\git\gtk\gdk\gdkdisplay.c @ 1239]
03 0097f2a8 79220adc gtk_4_1!gdk_display_prepare_gl+0x100 [[..]\git\gtk\gdk\gdkdisplay.c @ 1305]
04 0097f2b8 7929858f gtk_4_1!gdk_surface_create_gl_context+0x5c [[..]\git\gtk\gdk\gdksurface.c @ 1200]
05 0097f2dc 792b109c gtk_4_1!gsk_gl_renderer_realize+0x5f [[..]\git\gtk\gsk\gl\gskglrenderer.c @ 114]
06 (Inline) -------- gtk_4_1!gsk_renderer_realize+0x108 [[..]\git\gtk\gsk\gskrenderer.c @ 309]
07 0097f308 790382e2 gtk_4_1!gsk_renderer_new_for_surface+0x15c [[..]\git\gtk\gsk\gskrenderer.c @ 649]
08 0097f324 79200ecc gtk_4_1!gtk_window_realize+0x152 [[..]\git\gtk\gtk\gtkwindow.c @ 4323]
09 0097f364 5231924f gtk_4_1!gtk_application_window_real_realize+0x4c [[..]\git\gtk\gtk\gtkapplicationwindow.c @ 510]
0a 0097f378 523164dd gobject_2_0_0!g_cclosure_marshal_VOID__VOID+0x3f [[..]\git\gtk\subprojects\glib\gobject\gmarshal.c @ 117]
0b 0097f3a8 52328872 gobject_2_0_0!g_closure_invoke+0xdd [[..]\git\gtk\subprojects\glib\gobject\gclosure.c @ 832]
0c 0097f454 52325654 gobject_2_0_0!signal_emit_unlocked_R+0x382 [[..]\git\gtk\subprojects\glib\gobject\gsignal.c @ 3737]
0d 0097f554 52324ee6 gobject_2_0_0!g_signal_emit_valist+0x684 [[..]\git\gtk\subprojects\glib\gobject\gsignal.c @ 3555]
0e 0097f568 7904da50 gobject_2_0_0!g_signal_emit+0x16 [[..]\git\gtk\subprojects\glib\gobject\gsignal.c @ 3612]
0f 0097f580 7903a670 gtk_4_1!gtk_widget_realize+0xa0 [[..]\git\gtk\gtk\gtkwidget.c @ 3431]
10 0097f5a4 5231929b gtk_4_1!gtk_window_show+0x70 [[..]\git\gtk\gtk\gtkwindow.c @ 3840]
11 0097f5b4 523152f1 gobject_2_0_0!g_cclosure_marshal_VOID__VOIDv+0x2b [[..]\git\gtk\subprojects\glib\gobject\gmarshal.c @ 165]
12 0097f5e8 5232539a gobject_2_0_0!_g_closure_invoke_va+0xe1 [[..]\git\gtk\subprojects\glib\gobject\gclosure.c @ 895]
13 0097f6d8 52324ee6 gobject_2_0_0!g_signal_emit_valist+0x3ca [[..]\git\gtk\subprojects\glib\gobject\gsignal.c @ 3468]
14 0097f6ec 79050bee gobject_2_0_0!g_signal_emit+0x16 [[..]\git\gtk\subprojects\glib\gobject\gsignal.c @ 3612]
15 0097f710 79050b16 gtk_4_1!gtk_widget_show+0x7e [[..]\git\gtk\gtk\gtkwidget.c @ 2710]
16 0097f71c 79037f10 gtk_4_1!gtk_widget_set_visible+0x26 [[..]\git\gtk\gtk\gtkwidget.c @ 5688]
17 0097f738 79037e0b gtk_4_1!gtk_window_present_with_time+0x90 [[..]\git\gtk\gtk\gtkwindow.c @ 5280]
18 0097f744 00257292 gtk_4_1!gtk_window_present+0xb [[..]\git\gtk\gtk\gtkwindow.c @ 5225]
19 0097f774 77cb6d4d gtk4_demo!command_line+0x1e2 [[..]\git\gtk\demos\gtk-demo\main.c @ 1042]
1a 0097f790 523164dd gio_2_0_0!_g_cclosure_marshal_INT__OBJECT+0x4d [[..]\git\gtk\subprojects\glib\gio\gmarshal-internal.c @ 805]
1b 0097f7c0 52328a67 gobject_2_0_0!g_closure_invoke+0xdd [[..]\git\gtk\subprojects\glib\gobject\gclosure.c @ 832]
1c 0097f86c 523256f2 gobject_2_0_0!signal_emit_unlocked_R+0x577 [[..]\git\gtk\subprojects\glib\gobject\gsignal.c @ 3807]
1d 0097f990 52324ee6 gobject_2_0_0!g_signal_emit_valist+0x722 [[..]\git\gtk\subprojects\glib\gobject\gsignal.c @ 3565]
1e 0097f9a4 77d05756 gobject_2_0_0!g_signal_emit+0x16 [[..]\git\gtk\subprojects\glib\gobject\gsignal.c @ 3612]
1f 0097f9dc 77d07274 gio_2_0_0!g_application_call_command_line+0x76 [[..]\git\gtk\subprojects\glib\gio\gapplication.c @ 1085]
20 0097fa08 77d07750 gio_2_0_0!g_application_real_local_command_line+0x134 [[..]\git\gtk\subprojects\glib\gio\gapplication.c @ 1139]
21 0097fa34 00258536 gio_2_0_0!g_application_run+0x140 [[..]\git\gtk\subprojects\glib\gio\gapplication.c @ 2542]
22 0097fa6c 0026fed1 gtk4_demo!main+0x176 [[..]\git\gtk\demos\gtk-demo\main.c @ 1113]
23 (Inline) -------- gtk4_demo!invoke_main+0x1c [[redacted] @ 78]
24 0097fab4 76330099 gtk4_demo!__scrt_common_main_seh+0xfa [[redacted] @ 288]
25 0097fac4 77ac7b6e KERNEL32!BaseThreadInitThunk+0x19
26 0097fb20 77ac7b3e ntdll!__RtlUserThreadStart+0x2f
27 0097fb30 00000000 ntdll!_RtlUserThreadStart+0x1b
(This effectively refers to https://gitlab.gnome.org/GNOME/gtk/-/blob/main/gdk/win32/gdkglcontext-win32-wgl.c#L628)
It appears as if the stack pointer gets skewed by 4 bytes,
after a call to wglDeleteContext, as part of
g_clear_pointer (&hglrc_base, wglDeleteContext);
.
I assume this is due to different calling conventions on x86.
https://gitlab.gnome.org/GNOME/gtk/-/blob/main/gdk/win32/gdkglcontext-win32-wgl.c#L516