mattn / go-gtk

Go binding for GTK
http://mattn.github.com/go-gtk
BSD 3-Clause "New" or "Revised" License
2.11k stars 247 forks source link

Random Seg Faults in gtk.Main() #338

Closed SMerrony closed 6 years ago

SMerrony commented 6 years ago

I am seeing this crash at random intervals in my app...

Thread 1 "dasherg" received signal SIGSEGV, Segmentation fault.
0x00007ffff76b0f8d in g_slice_alloc () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
(gdb) bt
#0  0x00007ffff76b0f8d in g_slice_alloc () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#1  0x00007ffff76b15c1 in g_slice_copy () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#2  0x00007ffff7969e80 in  () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#3  0x00007ffff6d5115b in gtk_widget_style_get_valist () at /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
#4  0x00007ffff6d513a8 in gtk_widget_style_get () at /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
#5  0x00007ffff6d5146c in  () at /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
#6  0x00007ffff6d5344e in  () at /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
#7  0x00007ffff6bf7dcb in  () at /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
#8  0x00007ffff6d514c8 in  () at /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
#9  0x00007ffff6d5344e in  () at /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
#10 0x00007ffff6cbb0f8 in  () at /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
#11 0x00007ffff6d514c8 in  () at /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
#12 0x00007ffff6d5344e in  () at /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
#13 0x00007ffff6b87a15 in  () at /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
#14 0x00007ffff6d514c8 in  () at /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
#15 0x00007ffff6d53987 in gtk_widget_region_intersect () at /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
#16 0x00007ffff6bbc6ca in gtk_container_propagate_expose () at /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
#17 0x00007ffff6bbb17e in  () at /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
#18 0x00007ffff6c35b7b in  () at /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
#19 0x00007ffff796cf9d in g_closure_invoke () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#20 0x00007ffff797f758 in  () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#21 0x00007ffff7987e4f in g_signal_emit_valist () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#22 0x00007ffff7988ecf in g_signal_emit () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#23 0x00007ffff6d4bf9c in  () at /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
#24 0x00007ffff6c34958 in gtk_main_do_event () at /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
#25 0x00007ffff73d5b9f in  () at /usr/lib/x86_64-linux-gnu/libgdk-x11-2.0.so.0
#26 0x00007ffff73d2623 in  () at /usr/lib/x86_64-linux-gnu/libgdk-x11-2.0.so.0
#27 0x00007ffff73d2fb0 in gdk_window_process_all_updates () at /usr/lib/x86_64-linux-gnu/libgdk-x11-2.0.so.0
#28 0x00007ffff6bbae51 in  () at /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
#29 0x00007ffff73b1c1c in  () at /usr/lib/x86_64-linux-gnu/libgdk-x11-2.0.so.0
#30 0x00007ffff7693e25 in g_main_context_dispatch () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#31 0x00007ffff76941f0 in  () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#32 0x00007ffff7694502 in g_main_loop_run () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#33 0x00007ffff6c33727 in gtk_main () at /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
#34 0x0000000000497980 in runtime.asmcgocall () at /usr/local/go/src/runtime/asm_amd64.s:624
#35 0x00000000006928e0 in func.* ()
#36 0x000000c420059ec0 in  ()
#37 0x0000000000000010 in  ()
#38 0x00000000005e884c in main.main () at /home/steve/go/src/github.com/SMerrony/aosvs-tools/dasherg/dasherg.go:152

Very rarely it happens at startup, but more usually after a long period or (I think) just after the screensaver is cleared.

The app is threaded, but I have been very careful not to update the gui except in the main thread or via glib.IdleAdd().

Including this boilerplate makes no difference whatsoever...

    glib.ThreadInit(nil)
    gdk.ThreadsInit()
    gdk.ThreadsEnter()

The crash occurs o with Go 1.8 and 1.9 on Ubuntu 17.04 and 17.10 fully patched.

SMerrony commented 6 years ago

Closing this as I have restructured the code and the issue seems to have disappeared.

I changed the Go Tickers (and some Goroutines) to Glib Timeouts and stopped Emitting events.