SEGV with gtk-quartz on MacOS
Closed this issue · 11 comments
nobu commented
終了時にSEGVすることがあります。
cairo @1.14.10_0+quartz+universal (active)
gtk2 @2.24.31_0+quartz+universal (active)
pango @1.40.12_0+quartz+universal (active)
master, 2.2.0, 2.1.9 で発生しました。
finalizerの呼び出し順序に依存しているのかも。
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0 libsystem_kernel.dylib 0x00007fff926a2f06 __pthread_kill + 10
1 libsystem_pthread.dylib 0x00007fff93f754ec pthread_kill + 90
2 libsystem_c.dylib 0x00007fff995e26df abort + 129
3 libruby.2.5.0.dylib 0x000000010ff4e129 die + 9
4 libruby.2.5.0.dylib 0x000000010ff4e388 rb_bug_context + 600
5 libruby.2.5.0.dylib 0x0000000110036421 sigsegv + 81
6 libsystem_platform.dylib 0x00007fff8c98352a _sigtramp + 26
7 ??? 000000000000000000 0 + 0
8 libgobject-2.0.0.dylib 0x00000001112ebca8 g_signal_emit_valist + 2028
9 libgobject-2.0.0.dylib 0x00000001112ec35a g_signal_emit + 134
10 libgtk-3.0.dylib 0x00000001132c2973 gtk_widget_dispose + 122
11 libgtk-3.0.dylib 0x00000001132d1080 gtk_window_dispose + 76
12 libgobject-2.0.0.dylib 0x00000001112dc770 g_object_unref + 208
13 libgtk-3.0.dylib 0x0000000113198123 gtk_menu_destroy + 252
14 libgobject-2.0.0.dylib 0x00000001112d7a5c g_closure_invoke + 345
15 libgobject-2.0.0.dylib 0x00000001112eb3ed signal_emit_unlocked_R + 2931
16 libgobject-2.0.0.dylib 0x00000001112ebca8 g_signal_emit_valist + 2028
17 libgobject-2.0.0.dylib 0x00000001112ec35a g_signal_emit + 134
18 libgtk-3.0.dylib 0x00000001132c2973 gtk_widget_dispose + 122
19 libgobject-2.0.0.dylib 0x00000001112dc5d6 g_object_run_dispose + 46
20 libgtk-3.0.dylib 0x00000001131a041e gtk_menu_item_destroy + 26
21 libgobject-2.0.0.dylib 0x00000001112d7a5c g_closure_invoke + 345
22 libgobject-2.0.0.dylib 0x00000001112eb3ed signal_emit_unlocked_R + 2931
23 libgobject-2.0.0.dylib 0x00000001112ebca8 g_signal_emit_valist + 2028
24 libgobject-2.0.0.dylib 0x00000001112ec35a g_signal_emit + 134
25 libgtk-3.0.dylib 0x00000001132c2973 gtk_widget_dispose + 122
26 libgobject-2.0.0.dylib 0x00000001112dc5d6 g_object_run_dispose + 46
27 libgtk-3.0.dylib 0x00000001131a48ce gtk_menu_shell_forall + 38
28 libgtk-3.0.dylib 0x00000001130d1cba gtk_container_destroy + 87
29 libgobject-2.0.0.dylib 0x00000001112d7a05 g_closure_invoke + 258
30 libgobject-2.0.0.dylib 0x00000001112eb3ed signal_emit_unlocked_R + 2931
31 libgobject-2.0.0.dylib 0x00000001112ebca8 g_signal_emit_valist + 2028
32 libgobject-2.0.0.dylib 0x00000001112ec35a g_signal_emit + 134
33 libgtk-3.0.dylib 0x00000001132c2973 gtk_widget_dispose + 122
34 libgobject-2.0.0.dylib 0x00000001112dc770 g_object_unref + 208
35 libgtk-3.0.dylib 0x00000001130d01f7 gtk_container_remove + 149
36 libgtk-3.0.dylib 0x00000001132c291e gtk_widget_dispose + 37
37 libgobject-2.0.0.dylib 0x00000001112dc770 g_object_unref + 208
38 glib2.bundle 0x0000000111277d29 holder_free + 89 (rbgobj_object.c:50)
39 libruby.2.5.0.dylib 0x000000010ff66cd0 rb_gc_call_finalizer_at_exit + 2272 (gc.c:2984)
40 libruby.2.5.0.dylib 0x000000010ff572fd ruby_cleanup + 573 (eval.c:226)
41 libruby.2.5.0.dylib 0x000000010ff5747d ruby_run_node + 61 (eval.c:302)
42 ruby 0x000000010fedcf13 main + 99 (main.c:42)
43 libdyld.dylib 0x00007fffa05505ad start + 1
kou commented
これ、どうやって終了したときですか?qですか?それともターミナルでC-cですか?
nobu commented
どちらでも同じです。
kou commented
プロセス終了前にウィンドウを破棄しきっていないのがアレかなぁと思ったので、そこらへんを対応してみました。
nobu commented
やはり落ちますが、スタックトレースが短くなりました。
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0 libsystem_kernel.dylib 0x00007fff926a2f06 __pthread_kill + 10
1 libsystem_pthread.dylib 0x00007fff93f754ec pthread_kill + 90
2 libsystem_c.dylib 0x00007fff995e26df abort + 129
3 libruby.2.5.0.dylib 0x000000010396d129 die + 9
4 libruby.2.5.0.dylib 0x000000010396d388 rb_bug_context + 600
5 libruby.2.5.0.dylib 0x0000000103a55421 sigsegv + 81
6 libsystem_platform.dylib 0x00007fff8c98352a _sigtramp + 26
7 ??? 000000000000000000 0 + 0
8 libgdk-quartz-2.0.0.dylib 0x0000000105f0e5ea gdk_quartz_drawable_release_context + 86
9 libgdk-quartz-2.0.0.dylib 0x0000000105f0e332 gdk_quartz_cairo_surface_destroy + 29
10 libcairo.2.dylib 0x000000010524c883 _cairo_user_data_array_fini + 64
11 libcairo.2.dylib 0x0000000105295bbb cairo_surface_destroy + 132
12 libcairo.2.dylib 0x000000010524c883 _cairo_user_data_array_fini + 64
13 libcairo.2.dylib 0x000000010525ac9a _cairo_default_context_destroy + 14
14 glib2.bundle 0x0000000104c8ab33 boxed_free + 67 (rbgobj_boxed.c:50)
15 libruby.2.5.0.dylib 0x0000000103985cd0 rb_gc_call_finalizer_at_exit + 2272
16 libruby.2.5.0.dylib 0x00000001039762fd ruby_cleanup + 573
17 libruby.2.5.0.dylib 0x000000010397647d ruby_run_node + 61
18 ruby-trunk 0x00000001038fcf13 main + 99 (main.c:42)
19 libdyld.dylib 0x00007fffa05505ad start + 1
今気づいたのですが、Thread 2で glib_worker_main
が生きている状態なのですが、これは問題ないでしょうか。
Thread 2:: gmain
0 libsystem_kernel.dylib 0x00007fff926a307a __select + 10
1 libglib-2.0.0.dylib 0x0000000104d65771 g_poll + 399
2 libglib-2.0.0.dylib 0x0000000104d59380 g_main_context_iterate + 326
3 libglib-2.0.0.dylib 0x0000000104d5942f g_main_context_iteration + 55
4 libglib-2.0.0.dylib 0x0000000104d5a4ef glib_worker_main + 53
5 libglib-2.0.0.dylib 0x0000000104d7a536 g_thread_proxy + 90
6 libsystem_pthread.dylib 0x00007fff93f7299d _pthread_body + 131
7 libsystem_pthread.dylib 0x00007fff93f7291a _pthread_start + 168
8 libsystem_pthread.dylib 0x00007fff93f70351 thread_start + 13
また、終了時に次のような警告も出ていました。
2017-09-10 22:28:23.438 ruby-trunk[79309:83879774] *** WARNING: Method userSpaceScaleFactor in class NSView is deprecated on 10.7 and later. It should not be used in new applications. Use convertRectToBacking: instead.
Sep 10 22:28:30 ruby-trunk[79309] <Error>: CGContextRestoreGState: invalid context 0x7fc6f8506550. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
Sep 10 22:28:30 ruby-trunk[79309] <Error>: CGContextSetAllowsAntialiasing: invalid context 0x7fc6f8506550. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
kou commented
使い終わったCairo::Context
の破棄がGC任せになっているのがアレな風に見えたので、そうならないようにしてみました。
glib_worker_main
はUNIXのシグナルを処理するスレッドで、プロセスが死ぬまで動き続けるやつなので、生きていて問題ありません。(気持ち悪くはありますが。)
kou commented
あ、その警告ですが、GTK+ 3だとでなくなっているはずです。
RABBIT_GTK_VERSION=3 rabbit ...
でGTK+ 3を使うようになります。
nobu commented
kou commented
サイズはGDK_SCALE=1
で直るかもしれません。
nobu commented
変わりませんでした…
kou commented
おぉ。。。
kou commented
3.0.0で直っているはず!