プロジェクト

全般

プロフィール

バグ #1367

完了

アカウント登録時に落ちる

あひる 家鴨 さんが5年以上前に追加. 5年以上前に更新.

ステータス:
終了
優先度:
通常
対象バージョン:
プラグイン名:
extract
クラッシュする:
はい

説明

アカウント登録時完了時に下記エラーで落ちる。

/core/plugin/extract/extract_tab_list.rb:36:in `add_record': undefined method `name' for #<Hash:0x0000555e12ca9318>

原因はハッシュのプロパティに対してメソッドアクセスをしようとしているためと思われます。
ブランチ topic/1367-fix-extract-settings に修正をプッシュしましたので確認をお願いします。


再現手順

最新のmasterでmastodonアカウントを追加する。

toshi_a 初音 さんが5年以上前に更新

Hashが渡ってきているのが問題ですね。リリース前にチュートリアルを流した時には再現しなかったので、もう一度やってみます。

あひる 家鴨 さんが5年以上前に更新

mastodonのアカウント登録時に `Plugin::Extract::Setting` ではなく、ただのハッシュを渡しているように見えたので、他の箇所と同様にインスタンス化して渡してみたら落ちませんでした。
topic/1367-instantiate-setting にとりあえず確認のためにプッシュしてみました。

あひる 家鴨 さんが5年以上前に更新

設定からmastodonの抽出タブを開いた際も同様の問題が発生しました。

toshi_a 初音 さんが5年以上前に更新

  • 担当者あひる 家鴨 にセット

新規プロファイルでチュートリアルを流しましたが、クラッシュしませんでした。もう少し再現手順を詳細に教えてもらえますか。

あひる 家鴨 さんが5年以上前に更新

以下の手順を行なった場合に起こるということがわかりました。

下記URLの手順通りに「リンクを開く方法」を echo にした状態で認証を進めると、落ちることがわかりました。
https://honobono-ahiru.hatenablog.com/entry/2019/07/23/201717

なお、VirtualBox上のUbuntu 18.04 で構築し検証したところ以下の結果になりました。
・echoなしの場合落ちない
・echoありの場合落ちる

toshi_a 初音 さんが5年以上前に更新

エッ、本当にクラッシュした

toshi_a 初音 さんが5年以上前に更新

再現手順ですが、「リンクを開く方法」をechoに変えなくても、起動後設定画面を一度でも開いたことがあると再現しました。
ウィジェットかイベントハンドラの開放漏れがありそう……(o)

toshi_a 初音 さんが5年以上前に更新

d75deaf6 のパッチで良さそうです。

ただ、設定画面を開いている間だけではなく、一度でも開いた後なら閉じてもクラッシュするのは、 Plugin::Extract::ExtractTabList がメモリリークしており、Pluggaloidイベントハンドラが開放されていないからです。

source:core/plugin/settings/menu.rb@cca427d1#L63 で、設定メニューを作るためにPhantomを使って一度設定を組み立てさせているのがウィジェットのリークの原因となっています。
PhantomはForm DSLの全てのインスタンスメソッドを提供し、どのようなメソッド呼び出しにもMOCKを返すMOCKを返します。結果として、pack_start等にもたんにMOCKを返すだけなので、destroyイベントが発生することなくGCされるかメモリリークします。

すると、 source:core/plugin/extract/extract.rb@cca427d1#L101 のdestroyイベントハンドラが呼ばれず、 Plugin::Extract::ExtractTabList が開放されません。

このリークの解決は割と難しいかも

toshi_a 初音 さんが5年以上前に更新

  • ステータスパッチ適用待ち から レビュー待ち に変更

toshi_a 初音 さんが5年以上前に更新

  • ステータスレビュー待ち から 終了 に変更

masterにmergeしました

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