증상:
- 'Transcription failed: Sidecar 프로세스가 실행 중이 아닙니다' 에러
- 로그: [Errno 48] address already in use ('127.0.0.1', 18765)
- 새로 spawn한 sidecar가 즉시 exit code 1로 종료
- 그러나 health check은 성공 — 이전 인스턴스의 orphan sidecar가 응답
- _sidecarProcess 핸들이 새 (실패한) ChildProcess라서 transcribe 시
null check가 통과 못 하고 STTSidecarNotRunning 에러
원인:
- dev mode HMR/재시작 시 main process는 죽지만 spawn한 python 자식 프로세스가
orphan으로 살아남는 경우가 있음 (특히 SIGKILL이 자식까지 전파 안 될 때)
- 다음 main process가 SIDECAR_PORT(18765)에 다시 바인드하려다 충돌
수정:
- LocalSTTService._spawnSidecar 진입 시 _findFreePort(SIDECAR_PORT, 20) 호출
- net.createServer로 127.0.0.1:port listen 시도해 비어있는 첫 포트 탐색
- 18765부터 18784까지 순차 시도
- 모두 점유 시 STTSidecarSpawnFailed 에러
- this._port를 동적 할당 결과로 갱신 → spawn args + health/load/transcribe URL이
자동으로 새 포트 사용
영향:
- orphan sidecar가 18765를 점유하고 있어도 새 sidecar가 18766/18767에서 정상 부팅
- 이전 orphan은 시간이 지나거나 사용자가 직접 kill하거나 app quit 시 정리 가능
- 클린 환경에서는 항상 18765로 복귀
|
||
|---|---|---|
| .. | ||
| build | ||
| resources | ||
| scripts | ||
| sidecar | ||
| src | ||
| tests | ||
| electron-builder.yml | ||
| electron.vite.config.ts | ||
| package.json | ||
| tsconfig.json | ||
| tsconfig.node.json | ||
| tsconfig.web.json | ||
| vitest.config.ts | ||