バグ #1367
完了アカウント登録時に落ちる
説明
アカウント登録時完了時に下記エラーで落ちる。
/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年以上前に更新
- 担当者 を あひる 家鴨 にセット
新規プロファイルでチュートリアルを流しましたが、クラッシュしませんでした。もう少し再現手順を詳細に教えてもらえますか。
あひる 家鴨 さんが5年以上前に更新
以下の手順を行なった場合に起こるということがわかりました。
下記URLの手順通りに「リンクを開く方法」を echo にした状態で認証を進めると、落ちることがわかりました。
https://honobono-ahiru.hatenablog.com/entry/2019/07/23/201717
なお、VirtualBox上のUbuntu 18.04 で構築し検証したところ以下の結果になりました。
・echoなしの場合落ちない
・echoありの場合落ちる
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
が開放されません。
このリークの解決は割と難しいかも