From 6096992507b4780bfce6464299882df97fbf48e4 Mon Sep 17 00:00:00 2001 From: yuetsh <517252939@qq.com> Date: Thu, 22 Oct 2026 19:42:02 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=9A=E7=BC=96=E8=AF=91?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E3=80=81=E8=AF=AD=E8=A8=80=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=20stop()=20=E5=90=8E=E7=AB=8B=E5=8D=B3=E6=B8=85=E7=A9=BA?= =?UTF-8?q?=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 测试文件之间共用编译服务:上一个文件结束时 stop() 只发了结束信号,下一个文件马上发来的请求 仍交给正在退出的旧进程,随后报"编译服务意外退出"(GitHub Actions 上偶发)。现在 stop() 立即 清空进程和待回复的请求,下一次请求启动新进程。 Co-Authored-By: Claude Opus 5.5 --- server/src/compile-service.ts | 8 +++++++- server/src/language-service.ts | 8 +++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/server/src/compile-service.ts b/server/src/compile-service.ts index 211b6d9..2b82a9b 100644 --- a/server/src/compile-service.ts +++ b/server/src/compile-service.ts @@ -31,8 +31,14 @@ class CompileService { return result } + /** 结束进程;立即清空状态,下一次请求会启动新进程(不会发给正在退出的旧进程) */ stop() { - this.proc?.kill() + const proc = this.proc + this.proc = undefined + this.ready = undefined + for (const waiter of this.pending.values()) waiter.reject(new Error('编译服务已停止')) + this.pending.clear() + proc?.kill() } /** 服务器启动时调用,提前完成编译器的加载和预热 */ diff --git a/server/src/language-service.ts b/server/src/language-service.ts index 268d9d1..6575083 100644 --- a/server/src/language-service.ts +++ b/server/src/language-service.ts @@ -34,8 +34,14 @@ class LanguageService { return reply } + /** 结束进程;立即清空状态,下一次请求会启动新进程(不会发给正在退出的旧进程) */ stop() { - this.proc?.kill() + const proc = this.proc + this.proc = undefined + this.ready = undefined + for (const resolve of this.pending.values()) resolve(null) + this.pending.clear() + proc?.kill() } /** 服务器启动时调用,提前完成加载和预热 */