Override GtkWidget::draw() - gtk+-3.0

Hi,

I would love to override GtkWidget::draw() by my own widget implementation inheriting GtkWidget. Actually I am doing so for a long time …

What do I need to consider?

Recently I have experienced some instability on Apple OS X. After some debugging, I figured out some functions cause some real problems inside my ::draw() implementation.

  • cairo_push_group()
  • cairo_pop_group_to_source()
  • cairo_paint()

I am not sure which function causes problems, but as commenting them out it worked.


by Joël

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   libsystem_kernel.dylib        	0x00007fff67e6533a __pthread_kill + 10
1   libsystem_pthread.dylib       	0x00007fff67f21e60 pthread_kill + 430
2   libsystem_c.dylib             	0x00007fff67dec808 abort + 120
3   libsystem_c.dylib             	0x00007fff67debac6 __assert_rtn + 314
4   libcairo.2.dylib              	0x0000000104756d24 cairo_region_destroy + 132
5   libgdk-3.0.dylib              	0x000000010431f242 gdk_window_append_old_updated_area + 50
6   libgdk-3.0.dylib              	0x000000010430f97d gdk_window_process_updates_internal + 557
7   libgdk-3.0.dylib              	0x000000010430fdb7 gdk_window_process_updates_with_mode + 439
8   libgdk-3.0.dylib              	0x000000010431ff66 gdk_window_paint_on_clock + 38
9   libgobject-2.0.0.dylib        	0x0000000104acad06 _g_closure_invoke_va + 198 (gclosure.c:879)
10  libgobject-2.0.0.dylib        	0x0000000104ae1b38 g_signal_emit_valist + 1400 (gsignal.c:3376)
11  libgobject-2.0.0.dylib        	0x0000000104ae2562 g_signal_emit + 130
12  libgdk-3.0.dylib              	0x00000001042fee72 _gdk_frame_clock_emit_paint + 34
13  libgdk-3.0.dylib              	0x0000000104300471 gdk_frame_clock_paint_idle + 1105
14  libgdk-3.0.dylib              	0x00000001042dcf87 gdk_threads_dispatch + 71
15  libglib-2.0.0.dylib           	0x0000000104b740a4 g_timeout_dispatch + 20 (gmain.c:4804)
16  libglib-2.0.0.dylib           	0x0000000104b7803d g_main_context_dispatch + 349 (gmain.c:3974)
17  libglib-2.0.0.dylib           	0x0000000104b783b9 g_main_context_iterate + 537 (gmain.c:4049)
18  libglib-2.0.0.dylib           	0x0000000104b786fa g_main_loop_run + 250
19  libgtk-3.0.dylib              	0x0000000103afe57c gtk_main + 108
20  libgobject-2.0.0.dylib        	0x0000000104acab1d g_closure_invoke + 189 (gclosure.c:816)
21  libgobject-2.0.0.dylib        	0x0000000104ae114d signal_emit_unlocked_R + 1965 (gsignal.c:3677)
22  libgobject-2.0.0.dylib        	0x0000000104ae1e22 g_signal_emit_valist + 2146
23  libgobject-2.0.0.dylib        	0x0000000104ae2562 g_signal_emit + 130
24  libags.3.dylib                	0x00000001031f2104 ags_application_context_prepare + 196 (ags_application_context.c:972)
25  gsequencer                    	0x00000001028583cc ags_setup + 140 (gsequencer_main.c:112)
26  gsequencer                    	0x0000000102858932 main + 1362 (gsequencer_main.c:464)
27  libdyld.dylib                 	0x00007fff67d1dcc9 start + 1

for reference:

https://gitlab.gnome.org/GNOME/gtk/-/issues/2913

Hi,
Sorry I can’t help with the problem as I don’t own Apple.
I have a little example here, which you could check out if you want.

Hi,

I probably have to wait until valgrind supports latest Macos 10.15. From my point of view, somewhere the stack gets corrupted due to an integer overflow or alike …

The crash happens always by the same action but at a random code location.

regards Joël

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.