Project

General

Profile

バグ #830

User.new_ifnecessary がメインスレッド以外から呼ばれた時にクラッシュすることがある

Added by toshi_a 初音 over 4 years ago. Updated over 4 years ago.

Status:
終了
Priority:
通常
Target version:
プラグイン名:
ブランチ:
クラッシュする:

Description

#781 より

問題

source:core/user.rb では、 Retriever.new_ifnecessary を User.new_ifnecessary がオーバライドしていて、その中で User.findbyidname を呼んでいる。findbyidname はメインスレッドで呼ぶことはできないので、User.new_ifnecessaryがメインスレッドでは呼べないようになっている。

解決方法

User.new_ifnecessaryをやめる

そもそもRetriever.new_ifnecessaryは十分な機能をもっていて、Messageではオーバライドせずに使えている。こういうことをしているのはidnameでも引いてこれるようにしようとしているからだが、現状それは正しく動いていないので、他のRetriever同様、idのみでマッチングを行えば良い。

Retrieverの@storage相当のものをUserにもたせる

idnameで一意にUserのインスタンスが決まるのはUserだけなので、Retrieverがやっているのと全く同じようにインスタンス変数に保持する。


Related issues

Related to バグ #781: Userのインスタンスが生成されていないユーザのプロフィールを開けない終了toshi_a 初音2015-09-27Actions
#1

Updated by toshi_a 初音 over 4 years ago

  • Related to バグ #781: Userのインスタンスが生成されていないユーザのプロフィールを開けない added
#2

Updated by toshi_a 初音 over 4 years ago

idnameだけでもUserを取得可能になっているのは、Twitter API v1の頃の検索APIが、userのscreen_nameだけを返し、idを返さない仕様になっていたため、screen_nameのみによるuserの推定が必要になったことが原因らしい。

現在では少なくとも標準プラグインではこの挙動を期待したコードは残っていないように見える。これを消したときのサードパーティプラグインの影響だけが気になるところ。

恐らく別のサービスに対応するプラグインくらいしかこのメソッドを利用しないと思うので、影響はないんじゃないかな(願望)

#3

Updated by toshi_a 初音 over 4 years ago

  • Status changed from 新規 to 終了
  • Target version changed from 3.3 to 3.4

Twitter API 1.0なんてなかったんや

Also available in: Atom PDF