プロジェクト

全般

プロフィール

環境対応 #1211

「設定」のスキンを選択すると Ruby が core を吐いて落ちる

Izumi Tsutsui4ヶ月前に追加. 約2ヶ月前に更新.

ステータス:
終了
優先度:
通常
担当者:
-
対象バージョン:
開始日:
期日:
進捗率:

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 が怪しいといえば怪しい?


関連するチケット

関連している 環境対応 #1084: gtk2 3.2.1を使用する終了2017-11-20

関連している 環境対応 #1260: gtk2 3.2.7を利用する新規2018-06-06

関係しているリビジョン

リビジョン 10d1f888 (差分)
toshi_a 初音4ヶ月前に追加

gtk2 3.2.1 refs #1211

履歴

#1 ncaq net4ヶ月前に更新

私の環境だと「スキン」を選択しないで設定ダイアログを操作してるだけで落ちますね

/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

#2 Izumi Tsutsui4ヶ月前に更新

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 で落ちることがあるようです。

スキン設定がトリガというよりも、複数のアイコンを同時に表示する、ということがトリガなのかもしれません。

#3 toshi_a 初音4ヶ月前に更新

  • ステータス分類待ち から 実装待ち に変更

うちの環境でも、gtk2 3.2.4を使っていると再現できました。ひとまずRuby-GNOME2プロジェクトにバグ報告するために再現コードを書いてみましょう。mikutter側で回避する方法も見つかるかもしれません。
いずれにせよ、gtk2 3.2.4でmikutterの利用に支障が出るのは間違いないので、一旦は3.2.4ではなく、3.2.1を要求するようにすべきだと思っています。

#4 toshi_a 初音4ヶ月前に更新

#5 toshi_a 初音4ヶ月前に更新

  • トラッカーバグ から 環境対応 に変更
  • 進捗率0 にセット
  • 再現手順 を更新 (diff)
  • クラッシュする を削除 (はい)

gtk2 3.2.1にするとクラッシュしないことが確認できました。
これは次善策で、最終的にはgtk2の不具合として取り扱ってもらい、最新のgtk2 gemに追いつくことが目標です。このチケットでそこまで行うつもりです。

#6 Izumi Tsutsui4ヶ月前に更新

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 できるかは明日以降試してみます。

#7 Izumi Tsutsui4ヶ月前に更新

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 できるかは明日以降試してみます。

決め打ちで試したら切り分けられたっぽいのでメモ:

#8 Izumi Tsutsui4ヶ月前に更新

"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

ほんとか? という感じですが……

#9 Izumi Tsutsui4ヶ月前に更新

ほんとか? という感じですが……

ググって rb_data_type_tflags の説明を見てみると
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

現象と修正内容との相関という意味では妥当な感じはしますが、どうですかね。

#10 Izumi Tsutsui4ヶ月前に更新

ruby-gnome2 側に issue 投げていていろいろ進行中……
https://github.com/ruby-gnome2/ruby-gnome2/issues/1162

#11 toshi_a 初音4ヶ月前に更新

なんて行動力だ…。
ありがとうございます。報告もしたということであればruby-gnome2側で判断してもらうほうが良いでしょう。出すべき情報があればできるだけ出すようにします。

#12 Izumi Tsutsui4ヶ月前に更新

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 が出たらそれで解決ですね。

#13 Izumi Tsutsui3ヶ月前に更新

3.2.5 へ更新するとクラッシュする問題は解決しています。

これとは別に、 3.2.5 では #1221#note-1 の warning が大量に出る問題が残っていますが、
履歴#5の「最新のgtk2 gemに追いつくことが目標」は #1221 にして、
こちらのチケットはクローズでよいかもしれません。

#14 Izumi Tsutsui約2ヶ月前に更新

#15 Izumi Tsutsui約2ヶ月前に更新

  • ステータス実装待ち から 終了 に変更

#1260 の ruby-gnome2 3.2.7 に関連付けたので、更新されれば解決するこちらは終了にします

他の形式にエクスポート: Atom PDF