バグ #1367
closedアカウント登録時に落ちる
Description
アカウント登録時完了時に下記エラーで落ちる。
/core/plugin/extract/extract_tab_list.rb:36:in `add_record': undefined method `name' for #<Hash:0x0000555e12ca9318>
原因はハッシュのプロパティに対してメソッドアクセスをしようとしているためと思われます。
ブランチ topic/1367-fix-extract-settings に修正をプッシュしましたので確認をお願いします。
再現手順
最新のmasterでmastodonアカウントを追加する。
Updated by あひる 家鴨 about 5 years ago
Updated by toshi_a 初音 about 5 years ago
Hashが渡ってきているのが問題ですね。リリース前にチュートリアルを流した時には再現しなかったので、もう一度やってみます。
Updated by あひる 家鴨 about 5 years ago
mastodonのアカウント登録時に `Plugin::Extract::Setting` ではなく、ただのハッシュを渡しているように見えたので、他の箇所と同様にインスタンス化して渡してみたら落ちませんでした。
topic/1367-instantiate-setting にとりあえず確認のためにプッシュしてみました。
Updated by toshi_a 初音 about 5 years ago
- Assignee set to あひる 家鴨
新規プロファイルでチュートリアルを流しましたが、クラッシュしませんでした。もう少し再現手順を詳細に教えてもらえますか。
Updated by あひる 家鴨 about 5 years ago
以下の手順を行なった場合に起こるということがわかりました。
下記URLの手順通りに「リンクを開く方法」を echo にした状態で認証を進めると、落ちることがわかりました。
https://honobono-ahiru.hatenablog.com/entry/2019/07/23/201717
なお、VirtualBox上のUbuntu 18.04 で構築し検証したところ以下の結果になりました。
・echoなしの場合落ちない
・echoありの場合落ちる
Updated by toshi_a 初音 about 5 years ago
再現手順ですが、「リンクを開く方法」をechoに変えなくても、起動後設定画面を一度でも開いたことがあると再現しました。
ウィジェットかイベントハンドラの開放漏れがありそう……(o)
Updated by toshi_a 初音 about 5 years ago
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
が開放されません。
このリークの解決は割と難しいかも