noriokun4649/TVTComment

EventInfoを渡してからチャンネル変更時にTvTestが落ちる?

Closed this issue · 3 comments

現状EventInfoを渡すように変更しただけだがTvTestが落ちるようになった。
ただ、原因としては今回変更を加えていないTvTest用プラグイン側のEventInfo送信における処理が原因のように見える。
そのため現状対処しようがない。

具体的には番組情報の拡張情報が原因くさいが、時間がint32の範囲外になることもあった。よくわからない。

他のプラグインとの相性というか競合みたいな可能性がある。
他のプラグインが何らかの処理で時間がかかると、TvTCommentの通信プロセスがブロックされてTvTest側がレシーブの状態でフリーズしてしまっているのでは?

チャンネル変更時に不安定になる理由は、TvTestプラグイン側のTVTComment::OnChannelListChange()が呼ばれたときに、TvTestプラグイン側が送信するIPCのデータがおかしい(具体的にはまったく想定していない内容が送信されている)。IPCがおかしいデータを送信してしまう原因としては他のプラグインなどで処理がブロックされてチャンネル一覧の情報を正常に取得出来ないのが原因じゃないかと思う。で、これが原因でTVTComment::OnChannelListChange()で呼ばれるwin32filebuf.cppのbasic_win32filebuf<charT,traits>::dowrite()がフリーズしていると思われる。

とりあえずTVTComment::OnChannelListChange()をコメントアウトしてTvTestプラグイン側のデバッグ中にTVTComment::OnChannelSelectionChange()をブレイクポイントで見てみたがデータがチャンネル情報などがおかしい状態になっていた。で、これらのメソッドを呼び出すときに重複やザッピング対策としてタイマを使っているので、これの遅延をSETUP_CURJK_DELAY = 10000のように10秒にしてみたところチャンネル情報などのデータは正常に取得出来ていた。
つまり、他プラグインの処理やチャンネル切替時間がSETUP_CURJK_DELAY よりも時間がかかった場合、チャンネル情報が正常に取得出来ないのではないか?これは他プラグインの処理やチューナーのチャンネル切替時間に依存するので難しい。。。
だが、TVTComment::OnChannelSelectionChange()では正常に取得出来るようになっているが、TVTComment::OnChannelListChange()は依然とフリーズするのでこっちがフリーズする原因を探る必要がある。

そう、TVTComment::OnChannelListChange()がフリーズする原因はbasic_win32filebuf<charT,traits>::dowrite()がフリーズしてることだったが、この106行目にあるFile Writeが原因ぽくてこれがフリーズする理由としてはIPCの接続が切れている事があげられるみたい。なので、もしかしたらIPCでexe側に送信したデータがおかしくてexe側が処理できず(現にできていないが)exe側がIPCの接続を切断。プラグイン側はFile Writeしているのにもかかわらず急にIPCが切断されそのままフリーズ。
というのが流れじゃないかなと予想している。