Skip to content

fix: レンダリング中かどうかのチェックが正しく行われていないのを修正 #2713

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

sigprogramming
Copy link
Contributor

@sigprogramming sigprogramming commented Jul 15, 2025

内容

songTrackRendererrequestRenderingInterruptionメソッドはレンダリング中でないときに呼び出すとエラーをthrowしますが、今のmainブランチでは、レンダリング中かどうかのチェックをsongTrackRenderer.isRenderingではなくstate.nowRenderingで行っています。(本来はsongTrackRenderer.isRenderingをチェックすべき)
また、state.nowRenderingがtrueでsongTrackRenderer.isRenderingがfalseになるタイミングがあり、このタイミングでrequestRenderingInterruptionメソッドが呼ばれるとエラーが発生します。

現在のバージョン(0.24.1)ではエラーが発生することはなさそうで、もし発生したとしても致命的な状況にはならなそうですが、意図した挙動ではないので修正します。

エラーが発生するタイミング

songTrackRendererrenderメソッドの終了直前にisRenderingがfalseになり、再レンダリング要求がある場合は再度renderメソッドが実行されてisRenderingがtrueになりますが、renderメソッドはawaitしているので、await以降の処理は別の(新たな)マイクロタスクとして実行されます。

今のmainブランチのコードは、このrenderメソッドの終了と再実行の間に他の処理が挟まらない(nowRenderingがtrueであればisRenderingもtrue)のを前提として実装されていますが、前述のとおりrenderメソッドの再実行は別のマイクロタスクとして実行されるので、この前に他のマイクロタスクが実行されると、そのタスクでは、nowRenderingがtrueでisRenderingがfalseになります。そのタスク内でRENDERアクションが呼び出されて

if (state.nowRendering) {
  songTrackRenderer.requestRenderingInterruption();
}

というコードが実行されると、isRenderingはfalseなのでrequestRenderingInterruptionメソッド内でエラーが発生します。

バージョン0.24.1での影響

RENDERアクションをawaitしているところは無いので、RENDER内のrequestRenderingInterruptionメソッドを呼び出すところでエラーが発生しても、以降の処理が止まるなどの不具合が起こることはなさそうです。

STOP_RENDERINGアクションも、STOP_RENDERINGの前後でRENDERを呼んでいるところはなさそう(同じマクロタスクにはならなそう)だったので、こちらも不具合が起こることはなさそうです。

関連 Issue

その他

グローバルな状態を非同期で複数回変更する処理(RENDERアクションのような処理)は、間にマイクロタスクが挟まって意図しないタイミングで状態が読み書きされるということが起こってしまう危険があるので、そういう処理は最初からマクロタスクとして開始(debounceするなど)するようにしたほうが良いのかもしれません。

@sigprogramming sigprogramming requested a review from a team as a code owner July 15, 2025 16:27
@voicevox-preview-pages
Copy link

🚀 プレビュー用ページを作成しました 🚀

更新時点でのコミットハッシュ:49232a0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant