diff --git a/server/src/plugin/runtime/node-fork-worker.ts b/server/src/plugin/runtime/node-fork-worker.ts index f5c9e4b89..3203eb841 100644 --- a/server/src/plugin/runtime/node-fork-worker.ts +++ b/server/src/plugin/runtime/node-fork-worker.ts @@ -35,10 +35,17 @@ export class NodeForkWorker extends ChildProcessWorker { } send(message: RpcMessage, reject?: (e: Error) => void): void { - this.worker.send(message, undefined, e => { - if (e && reject) - reject(e); - }); + try { + if (!this.worker) + throw new Error('worked has been killed'); + this.worker.send(message, undefined, e => { + if (e && reject) + reject(e); + }); + } + catch (e) { + reject?.(e); + } } get pid() { diff --git a/server/src/plugin/runtime/node-thread-worker.ts b/server/src/plugin/runtime/node-thread-worker.ts index 9f1ab062d..d5e20e54d 100644 --- a/server/src/plugin/runtime/node-thread-worker.ts +++ b/server/src/plugin/runtime/node-thread-worker.ts @@ -60,6 +60,8 @@ export class NodeThreadWorker extends EventEmitter implements RuntimeWorker { send(message: RpcMessage, reject?: (e: Error) => void): void { try { + if (!this.worker) + throw new Error('worked has been killed'); this.worker.postMessage(v8.serialize(message)); } catch (e) { diff --git a/server/src/plugin/runtime/python-worker.ts b/server/src/plugin/runtime/python-worker.ts index 87cd10070..fc95b7848 100644 --- a/server/src/plugin/runtime/python-worker.ts +++ b/server/src/plugin/runtime/python-worker.ts @@ -55,6 +55,13 @@ export class PythonRuntimeWorker extends ChildProcessWorker { } send(message: RpcMessage, reject?: (e: Error) => void): void { - (this.worker.stdio[3] as Writable).write(JSON.stringify(message) + '\n', e => e && reject?.(e)); + try { + if (!this.worker) + throw new Error('worked has been killed'); + (this.worker.stdio[3] as Writable).write(JSON.stringify(message) + '\n', e => e && reject?.(e)); + } + catch (e) { + reject?.(e); + } } }