Project

General

Profile

バグ #1367

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

Added by あひる 家鴨 4 months ago. Updated 4 months ago.

Status:
終了
Priority:
通常
Target version:
プラグイン名:
extract
ブランチ:
topic/1367-fix-extract-settings
クラッシュする:
Yes

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アカウントを追加する。

Associated revisions

Revision d75deaf6 (diff)
Added by あひる 家鴨 4 months ago

mastodonのextract_tab作成時にハッシュではなくPlugin::Extract::Settingを渡すように変更 refs #1367

History

#2

Updated by toshi_a 初音 4 months ago

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

#3

Updated by あひる 家鴨 4 months ago

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

#4

Updated by あひる 家鴨 4 months ago

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

#5

Updated by toshi_a 初音 4 months ago

  • Assignee set to あひる 家鴨

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

#6

Updated by あひる 家鴨 4 months ago

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

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

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

#7

Updated by toshi_a 初音 4 months ago

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

#8

Updated by toshi_a 初音 4 months ago

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

#9

Updated by toshi_a 初音 4 months 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 が開放されません。

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

#10

Updated by toshi_a 初音 4 months ago

  • Status changed from パッチ適用待ち to レビュー待ち
#11

Updated by toshi_a 初音 4 months ago

  • Status changed from レビュー待ち to 終了

masterにmergeしました

Also available in: Atom PDF