バグ #1322
closed
エラーメッセージを出さず突然正常終了することがある
Added by cob odo over 6 years ago.
Updated about 6 years ago.
Description
--debug
オプションを付けていても、エラーメッセージを出さずに正常終了することがあります。
先週末のOSC開催中に会場やmastodonで少し話題になりましたが、Ruby 2.6系の仕様変更が影響しているのではないかという話でした。
チケットを立てておこうということになっていたと思いますので、立てました。
ついでに、簡単に再現する方法を見つけたので、書いておきます。これがすべてかどうかはわかりません。
この方法ではruby-2.5.3では何回やっても再現せず、ruby-2.6.1では今の所100%再現します。
再現手順
1. コンソールを開く
2. bg_system('true')
を実行する。
追試したところ、起動直後のしばらくは確実に再現できるものの、時間が経つと問題なくなるようでした。また、bg_system
を使わずとも、spawn
だけで同じ挙動を観測できます。
以下のような簡単なrubyプログラム
while true
puts Time.now
spawn 'true'
sleep 1
end
をruby-2.6.1で実行しても(当然ながら)途中で勝手に終了したりはしないので、mikutter側の何かが原因になっているとは思います。
- Status changed from 分類待ち to 実装待ち
確実に再現できることを確認しました。こちらの環境はRuby 2.6.1です。
- Related to バグ #1318: popup_notifyイベントの第二引数にPlugin::Twitter::Message以外のMessage Modelを渡すと通知が発生しない added
- Assignee set to toshi_a 初音
- Target version set to 3.9
- プラグイン名 set to libnotify
通知のほか、ブラウザでURLを開く時には外部コマンドを呼んでいるので、このときに終了することがあります。
現在のmikutterでは終了時には事前にメインウィンドウが破棄されてるはずなので、メインループを抜けてもウィンドウが残っているならもう一度メインループに復帰すれば大丈夫かも
- Status changed from 実装待ち to レビュー待ち
- Assignee changed from toshi_a 初音 to cob odo
- プラグイン名 changed from libnotify to gtk
- ブランチ set to topic/1322-never-ending-mainloop
ブラウザを外部コマンドで開くときにも再現できたので、gtkプラグインの問題に変更しておきます。
現在のmikutterでは終了時には事前にメインウィンドウが破棄されてるはずなので、メインループを抜けてもウィンドウが残っているならもう一度メインループに復帰すれば大丈夫かも
Gtkプラグインがロードされている状態では、メインループ脱出時にウィンドウを確認し、まだ破棄されていないウィンドウがあれば警告を表示して復帰するようにしてみました。
この変更を適用して再現手順を実行すると、ログに復帰した旨が出力され、終了しません。
Gtkプラグインがあるときだけ発生する問題なので、このプラグイン内で回避するということで良いと思います。
- Status changed from レビュー待ち to 終了
- Related to 提案 #1319: libnotifyプラグインの、rnotify.rbを削除する added
Also available in: Atom
PDF