Skip to content
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

エンジンPIDの探索に失敗して起動できない #1360

Closed
1 of 3 tasks
y-chan opened this issue Jul 1, 2023 · 6 comments · Fixed by #1379
Closed
1 of 3 tasks

エンジンPIDの探索に失敗して起動できない #1360

y-chan opened this issue Jul 1, 2023 · 6 comments · Fixed by #1379

Comments

@y-chan
Copy link
Member

y-chan commented Jul 1, 2023

不具合の内容

題のとおりです。
PIDの探索コマンドの実行に失敗しているみたいです。

const stdout = execFileSync(exec.cmd, exec.args, {
shell: true,
}).toString();

image

何回か試していると、Error: spawnSync /bin/sh ENOBUFSというエラーが発生しているみたいです。

image

execFileSyncが適切にエラーハンドリングされていないために発生しているという点と、execFileSyncはバッファサイズに制限があるためにこのようなエラーが発生するようで、spwanSyncを利用することで回避できるようです。(そもそもプロセスIDしか返してこないはずがバッファオーバーフローしているのと、空文字列を返してきているはずなのにこのエラーが出ているという点において色々おかしいのですが...)

https://stackoverflow.com/questions/63796633/spawnsync-bin-sh-enobufs
https://neos21.net/blog/2019/10/18-01.html#child_processspawnsync

ちなみに、どうやら単体でこのコマンドを実行し、プロセスが存在しなかった場合はエラーを返すようです。(左端にバツ印がついている)
image

再現手順

Windows以外(私はMacで発生しました、lsofの仕様が一緒であればlinuxでも発生するはず)で最新mainブランチにおいてnpm run electron:serveする

期待動作

問題なく起動する

VOICEVOXのバージョン

main

OSの種類/ディストリ/バージョン

  • Windows
  • macOS
  • Linux
@Hiroshiba
Copy link
Member

ポートが塞がれていたときに別のポートを探索する部分ですね!

spwanSyncを利用することで回避できる

なるほどです、回避できるなら回避したいところですね・・・!

@madosuki
Copy link
Contributor

madosuki commented Jul 2, 2023

このバグの根本的な原因は #1267 (comment) のやつだと思います。

どうやらElectronは自身にバンドルしているNode.JSを使用するようで、Electron 20.3.12内のv16.15が使われてしまいこのバグが発生してしまうようです。

それはそれとしてlsofの結果が空だと例外が発生するのでエラーハンドリングは必要のようです。

@Hiroshiba
Copy link
Member

Hiroshiba commented Jul 2, 2023

@madosuki さんありがとうございます!!

なかなか奥が深いですね……。
新しいelectronだとnodeのバージョン上がってたりしないかな…。

空の時のエラーは、とりあえずwarnにログ出しつつfixmeコメント書くとかで良さそうですかねぇ。

@madosuki
Copy link
Contributor

madosuki commented Jul 2, 2023

https://releases.electronjs.org/
23以降なら修正が反映されているバージョンを使っているようなのでどれかにするのが良さそう。

@Hiroshiba
Copy link
Member

なるほどです!
21と22のバージョンアップは問題ないという感じでした

23はwindows 8の切り捨てになるとのこと。まあ・・・良いかな!
目指せ23アプデかなと思いました!

@sabonerune
Copy link
Contributor

普通は起こらないと思いますがWindowsでも極端に大量(15000ポート程度で発生)のポートを使用している場合にexecFileSyncの出力がオーバーフローする場合があると念のため報告します。

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

Successfully merging a pull request may close this issue.

4 participants