Closed HashidaTKS closed 2 weeks ago
修正自体は問題なさそうにみえるんですが、複数インスタンス起動して終了すると、削除されないパターンがありませんか。 SGモードだとまるっと削除されてしまうので見落としがちなんですけれども。
程度で再現するように見えます。
https://github.com/ThinBridge/Chronos/blob/master/Sazabi.cpp#L4164-L4169 これはIsEnableDeleteCache
でガードしているけどこれもいらない?
https://github.com/ThinBridge/Chronos/blob/master/Sazabi.cpp#L4164-L4169 これは
IsEnableDeleteCache
でガードしているけどこれもいらない?
いらなかったため削除しました。
修正自体は問題なさそうにみえるんですが、複数インスタンス起動して終了すると、削除されないパターンがありませんか。 SGモードだとまるっと削除されてしまうので見落としがちなんですけれども。
* Chronos.exe起動 (A) * Chronos.exe起動 (B) * B終了 * A終了
程度で再現するように見えます。
確認中です。
修正自体は問題なさそうにみえるんですが、複数インスタンス起動して終了すると、削除されないパターンがありませんか。 SGモードだとまるっと削除されてしまうので見落としがちなんですけれども。
* Chronos.exe起動 (A) * Chronos.exe起動 (B) * B終了 * A終了
程度で再現するように見えます。
確認中です。
再現した。 終了時、自分が最後のインスタンスでないとキャッシュを削除しようとせず、削除するときも削除するキャッシュが自分のpidのものだけなことが原因。 また、起動時にも自分のpidのキャッシュしか削除しないので、それらのキャッシュは削除されずに残り続ける。
以下の方針で対応した。
終了時については、最後のインスタンスかどうかにかかわらず、常に自分のpidのキャッシュを削除するようにしても良いと思うが、変更差分が少なくなるように上記のように対応した。
Which issue(s) this PR fixes:
https://github.com/ThinBridge/Chronos/issues/197
What this PR does / why we need it:
https://magpcss.org/ceforum/viewtopic.php?f=6&t=19677&p=54689&hilit=OnAlreadyRunningAppRelaunch#p54689
CEF120以降では、複数のCEFのインスタンスが起動する際、
CefSettings.root_cache_path
が重複していると動作しないため、インタンス単位でCefSettings.root_cache_path
が重複しないように変更。 本修正ではプロセスIDを使用しキャッシュパスが以下のようになるよう変更している。C:\Users\<user>\AppData\Local\Thinstall\ChronosSG\%drive_C%\Chronos\CEFCache\{pid}
(SGモード)C:\Users\<user>\AppData\Local\ChronosCache\{pid}
(通常モード)また、プロセスIDを使うようになった都合上、キャッシュフォルダを次回以降の起動で再利用できないので、
IsEnableDeleteCache
(ブラウザーキャッシュ(インターネット一時ファイル)を起動/終了時に削除する)の設定に関わらずキャッシュフォルダを毎回削除するように修正。 なお、従来からSGモードではIsEnableDeleteCache
の設定に関わらずキャッシュフォルダは削除されていたので、ユーザーへの実影響はないはずである。また、
CefSettings.root_cache_path
が重複した場合のハンドラーであるOnAlreadyRunningAppRelaunch
も実装。CefSettings.root_cache_path
が重複した場合、デフォルトではChromeスタイルの新しいウィンドウが起動するが、そうではなく、Chronos独自の処理をそのまま続けるようこのハンドラーで設定した。https://cef-builds.spotifycdn.com/docs/121.0/classCefBrowserProcessHandler.html#a052a91639483467c0b546d57a05c2f06
ただし、修正後は
CefSettings.root_cache_path
は重複しないため、OnAlreadyRunningAppRelaunch
も呼ばれないはずである(呼ばれたとしたらバグ)。そのため、これは念のための対処である。How to verify the fixed issue:
以下ChronosのネイティブアプリとSGモードの両方でテストする。
準備:
テスト:
EnableMultipleInstance=1
とするC:\Users\<user>\AppData\Local\Thinstall\ChronosSG\%drive_C%\Chronos\CEFCache\{pid}
(SGモード)C:\Users\<user>\AppData\Local\ChronosCache\{pid}
(通常モード)CEFDebug.log
のみが存在する。 これは、キャッシュフォルダにCEFDebug.log
が作成され、キャッシュフォルダを削除しようとするタイミングでまだこのファイルをCEFが開いており、このファイルが削除できないためである。CEFDebug.log
のみが存在する。 これは、キャッシュフォルダにCEFDebug.log
が作成され、キャッシュフォルダを削除しようとするタイミングでまだこのファイルをCEFが開いており、このファイルが削除できないためである。C:\Users\<user>\AppData\Local\Thinstall\ChronosSG\%drive_C%\Chronos\CEFCache\test
(SGモード)C:\Users\<user>\AppData\Local\ChronosCache\test
(通常モード)