環境対応 #1211
完了「設定」のスキンを選択すると Ruby が core を吐いて落ちる
0%
説明
環境依存の問題のようですが、複数で発生しているのでチケット入れておきます。
「設定」を開いて「スキン」を選択すると Ruby が Abort で落ちるという事象が発生しています。
https://twitter.com/uaa/status/988030251350425600
Hello, world! from #mikutter 3.6.6 on #OpenBSD 6.3/amd64!
21:22 - 2018年4月22日
https://twitter.com/uaa/status/988031047563530240
#mikutter 3.6.6、設定→スキンをつつくと[NOTE] You may have encountered a bug in the Ruby(以下省略)でAbort trap+コア吐きます。うちのところだけかもしれないけど。
21:25 - 2018年4月22日
NetBSD/i386 8.0_RC1 + mikutter 3.6.6 + ruby-gnome2 3.2.4 + ruby 2.4.4 の Live Image 環境でも再現します。
https://social.mikutter.hachune.net/@tsutsuii/99903163294377518
NetBSD/i386 7.1.2 + mikutter 3.6.5 + ruby-gmone2 3.2.4 + ruby 2.4.4 の環境でも発生します。
NetBSD/i386 7.1.2 + mikutter 3.6.5 + ruby-gmone2 3.2.1 + ruby 2.4.4 の環境では発生しないようです。
https://social.mikutter.hachune.net/@tsutsuii/99909502604892294
発生した時は落ちる直前に以下の [BUG] メッセージが出ています。
その1
/usr/pkg/share/mikutter/core/lib/diva_hacks/mixin/photo_mixin.rb:144: [BUG] obje ct allocation during garbage collection phase ruby 2.4.4p296 (2018-03-28 revision 63013) [i486-netbsdelf] : [NOTE] You may have encountered a bug in the Ruby interpreter or extension libraries. Bug reports are welcome. For details: http://www.ruby-lang.org/bugreport.html
その2
/usr/pkg/share/mikutter/core/lib/diva_hacks/mixin/photo_mixin.rb:145: [BUG] obje ct allocation during garbage collection phase ruby 2.4.4p296 (2018-03-28 revision 63013) [i486-netbsdelf]
その3
/usr/pkg/lib/ruby/gems/2.4.0/gems/delayer-0.0.2/lib/delayer.rb:48: [BUG] object allocation during garbage collection phase ruby 2.4.4p296 (2018-03-28 revision 63013) [i486-netbsdelf]
その4
/usr/pkg/lib/ruby/2.4.0/delegate.rb:137: [BUG] object allocation during garbage collection phase ruby 2.4.4p296 (2018-03-28 revision 63013) [i486-netbsdelf]
その5
/usr/pkg/lib/ruby/2.4.0/timeout.rb:86: [BUG] object allocation during garbage co llection phase ruby 2.4.4p296 (2018-03-28 revision 63013) [i486-netbsdelf]
https://social.mikutter.hachune.net/@toshi_a/99909414427855648
[BUG]が入ってるやつはC Extensionか下手するとRubyランタイム自体のバグを踏んでいる
2018年4月24日 0:18
ということなので ruby-gnome2 が怪しいといえば怪しい?
関連するチケット
ncaq エヌユル さんが6年以上前に更新
私の環境だと「スキン」を選択しないで設定ダイアログを操作してるだけで落ちますね
/usr/lib64/ruby/2.4.0/delegate.rb:137: [BUG] object allocation during garbage collection phase ruby 2.4.4p296 (2018-03-28 revision 63013) [x86_64-linux] -- Control frame information ----------------------------------------------- c:0014 p:---- s:0069 e:000068 CFUNC :delete c:0013 p:---- s:0066 e:000061 CFUNC :<=> c:0012 p:---- s:0059 e:000058 CFUNC :== c:0011 p:0030 s:0054 e:000053 METHOD /usr/lib64/ruby/2.4.0/delegate.rb:137 [FINISH] c:0010 p:---- s:0049 e:000048 CFUNC :delete c:0009 p:0073 s:0044 e:000043 METHOD /usr/share/mikutter/core/lib/reserver.rb:126 c:0008 p:0008 s:0039 e:000038 BLOCK /usr/share/mikutter/core/lib/reserver.rb:110 c:0007 p:0039 s:0036 E:001918 BLOCK /usr/lib64/ruby/2.4.0/timeout.rb:93 [FINISH] c:0006 p:0108 s:0030 E:0012f0 METHOD /usr/lib64/ruby/2.4.0/timeout.rb:103 c:0005 p:0062 s:0018 E:000448 METHOD /usr/share/mikutter/core/lib/reserver.rb:109 c:0004 p:0008 s:0013 e:000012 BLOCK /usr/share/mikutter/core/lib/reserver.rb:155 [FINISH] c:0003 p:---- s:0010 e:000009 CFUNC :loop c:0002 p:0011 s:0006 e:000005 BLOCK /usr/share/mikutter/core/lib/reserver.rb:154 [FINISH] c:0001 p:---- s:0003 e:000002 (none) [FINISH]
% ruby -v ruby 2.4.4p296 (2018-03-28 revision 63013) [x86_64-linux]
mikutter 3.6.6, ruby-gtk2 3.2.4
Izumi Tsutsui さんが6年以上前に更新
NetBSD/i386 7.1.2 + mikutter 3.6.5 + ruby-gmone2 3.2.4 + ruby 2.4.4 の環境で複数回テストをしましたが
5回に1回程度はスキンを選択する前に object allocation during garbage collection phase で落ちることがあるようです。
スキン設定がトリガというよりも、複数のアイコンを同時に表示する、ということがトリガなのかもしれません。
toshi_a 初音 さんが6年以上前に更新
- ステータス を 分類待ち から 実装待ち に変更
うちの環境でも、gtk2 3.2.4を使っていると再現できました。ひとまずRuby-GNOME2プロジェクトにバグ報告するために再現コードを書いてみましょう。mikutter側で回避する方法も見つかるかもしれません。
いずれにせよ、gtk2 3.2.4でmikutterの利用に支障が出るのは間違いないので、一旦は3.2.4ではなく、3.2.1を要求するようにすべきだと思っています。
toshi_a 初音 さんが6年以上前に更新
- トラッカー を バグ から 環境対応 に変更
- 進捗率 を 0 にセット
- 再現手順 を更新 (差分)
- クラッシュする を削除 (
はい)
gtk2 3.2.1にするとクラッシュしないことが確認できました。
これは次善策で、最終的にはgtk2の不具合として取り扱ってもらい、最新のgtk2 gemに追いつくことが目標です。このチケットでそこまで行うつもりです。
Izumi Tsutsui さんが6年以上前に更新
gtk2 の gem は 3.2.4 のままで glib2 の gem の中身を 3.2.1 相当にする
(glib2 3.2.4 の gem からバイナリを作る時に glib2 の 3.2.4 -> 3.2.1 の差分を当ててから作る)
と core を吐くことはなくなるようです。
(そもそも gtk2 gem 自体は 3.2.1 -> 3.2.4 で有意な差がない)
bisect できるかは明日以降試してみます。
Izumi Tsutsui さんが6年以上前に更新
gtk2 の gem は 3.2.4 のままで glib2 の gem の中身を 3.2.1 相当にする
(glib2 3.2.4 の gem からバイナリを作る時に glib2 の 3.2.4 -> 3.2.1 の差分を当ててから作る)
と core を吐くことはなくなるようです。
(そもそも gtk2 gem 自体は 3.2.1 -> 3.2.4 で有意な差がない)bisect できるかは明日以降試してみます。
決め打ちで試したら切り分けられたっぽいのでメモ:
- ruby-gnome2 glib2 の履歴 https://github.com/ruby-gnome2/ruby-gnome2/commits/master/glib2 の
2551a2c (次の TypedData 変更の直前のリビジョン) で作った glib2 gem を入れた状態だと落ちない - ruby-gnome2 glib2 の 9b76f52 "glib2: start to use TypedData" の変更
https://github.com/ruby-gnome2/ruby-gnome2/commit/9b76f52c47d87fce6d8b000e5777a830d81d5aa8
と 9db8371 の mikutter が起動しなくなった問題の修正
https://github.com/ruby-gnome2/ruby-gnome2/commit/9db8371c0a9a7bca48bb3f2b57687d0c26e898e8
を当てたものから作った glib2 gem を入れた状態だと落ちる
Izumi Tsutsui さんが6年以上前に更新
- ruby-gnome2 glib2 の履歴 https://github.com/ruby-gnome2/ruby-gnome2/commits/master/glib2 の
2551a2c (次の TypedData 変更の直前のリビジョン) で作った glib2 gem を入れた状態だと落ちない- ruby-gnome2 glib2 の 9b76f52 "glib2: start to use TypedData" の変更
https://github.com/ruby-gnome2/ruby-gnome2/commit/9b76f52c47d87fce6d8b000e5777a830d81d5aa8
と 9db8371 の mikutter が起動しなくなった問題の修正
https://github.com/ruby-gnome2/ruby-gnome2/commit/9db8371c0a9a7bca48bb3f2b57687d0c26e898e8
を当てたものから作った glib2 gem を入れた状態だと落ちる
"object allocation during garbage collection phase" という単語だけから脊髄反射的な思いつきで
ruby-gnome2 に以下の修正を当てて glib2 gem を作ってみると、
mikutter の設定のスキン連打でも落ちなくなるようです。
--- ext/glib2/rbgobj_object.c.orig 2018-04-27 18:22:38.000000000 +0000
+++ ext/glib2/rbgobj_object.c
@@ -88,7 +88,7 @@ static const rb_data_type_t rg_glib_obje
},
NULL,
NULL,
- RUBY_TYPED_FREE_IMMEDIATELY,
+ RUBY_TYPED_WB_PROTECTED,
};
VALUE
ほんとか? という感じですが……
Izumi Tsutsui さんが6年以上前に更新
ほんとか? という感じですが……
ググって rb_data_type_t
の flags
の説明を見てみると
https://gist.github.com/yugui/87ef6964d8a76794be6f
flagsには次のフラグのうち当てはまるもののビット和を指定します. いずれもRubyのガーベージコレクタについての深い理解を必要としますので, 良くわからない場合には0を指定すると良いでしょう.
RUBY_TYPED_FREE_IMMEDIATELY
このフラグを指定すると,ガーベージコレクタはこの構造体が不要になった場合にはGC中に直ちにdfreeを呼び出します. dfreeがRuby内部のロック(GVL)を解放する可能性がない場合はこのフラグを指定できます.
指定しない場合はdfree呼び出しは遅延され, ファイナライザと同じタイミングで実行されます.
ということなので、 RUBY_TYPED_FREE_IMMEDIATELY
の代わりにRUBY_TYPED_WB_PROTECTED
ではなく 0 を指定してみると、
これでもスキン連打でクラッシュすることはなくなるようです。
--- ext/glib2/rbgobj_object.c.orig 2018-04-27 18:22:38.000000000 +0000
+++ ext/glib2/rbgobj_object.c
@@ -88,7 +88,7 @@ static const rb_data_type_t rg_glib_obje
},
NULL,
NULL,
- RUBY_TYPED_FREE_IMMEDIATELY,
+ 0,
};
VALUE
現象と修正内容との相関という意味では妥当な感じはしますが、どうですかね。
Izumi Tsutsui さんが6年以上前に更新
ruby-gnome2 側に issue 投げていていろいろ進行中……
https://github.com/ruby-gnome2/ruby-gnome2/issues/1162
toshi_a 初音 さんが6年以上前に更新
なんて行動力だ…。
ありがとうございます。報告もしたということであればruby-gnome2側で判断してもらうほうが良いでしょう。出すべき情報があればできるだけ出すようにします。
Izumi Tsutsui さんが6年以上前に更新
ruby-gnome2 側で修正入りました。
https://github.com/ruby-gnome2/ruby-gnome2/issues/1162#issuecomment-385135895
こちらの NetBSD/i386 7.1.2 + pkgsrc ruby-gnome2 3.2.4 + 今回の修正差分 の環境で
設定のスキンを5回トライしてクラッシュ発生なしなので直っていると思います。
ruby-gnome2 3.2.5 が出たらそれで解決ですね。
Izumi Tsutsui さんが6年以上前に更新
3.2.5 へ更新するとクラッシュする問題は解決しています。
これとは別に、 3.2.5 では #1221#note-1 の warning が大量に出る問題が残っていますが、
履歴#5の「最新のgtk2 gemに追いつくことが目標」は #1221 にして、
こちらのチケットはクローズでよいかもしれません。
Izumi Tsutsui さんが6年以上前に更新
- ステータス を 実装待ち から 終了 に変更
#1260 の ruby-gnome2 3.2.7 に関連付けたので、更新されれば解決するこちらは終了にします