fix: deno runtime controller not handling undefined child process reference correctly (#33494)

pull/33386/head^2
Douglas Gubert 1 year ago committed by GitHub
parent d9fe5bbe0b
commit 5f9826bed6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 5
      .changeset/proud-bugs-cry.md
  2. 13
      packages/apps-engine/src/server/runtime/deno/AppsEngineDenoRuntime.ts

@ -0,0 +1,5 @@
---
'@rocket.chat/apps-engine': patch
---
Fixed a problem in the deno runtime controller where it would not handle undefined child process references correctly

@ -71,7 +71,7 @@ export type DenoRuntimeOptions = {
};
export class DenoRuntimeSubprocessController extends EventEmitter {
private deno: child_process.ChildProcess;
private deno: child_process.ChildProcess | undefined;
private state: 'uninitialized' | 'ready' | 'invalid' | 'restarting' | 'unknown' | 'stopped';
@ -166,6 +166,11 @@ export class DenoRuntimeSubprocessController extends EventEmitter {
}
public async killProcess(): Promise<void> {
if (!this.deno) {
this.debug('No child process reference');
return;
}
// This field is not populated if the process is killed by the OS
if (this.deno.killed) {
this.debug('App process was already killed');
@ -201,7 +206,7 @@ export class DenoRuntimeSubprocessController extends EventEmitter {
public async getStatus(): Promise<AppStatus> {
// If the process has been terminated, we can't get the status
if (this.deno.exitCode !== null) {
if (!this.deno || this.deno.exitCode !== null) {
return AppStatus.UNKNOWN;
}
@ -311,6 +316,10 @@ export class DenoRuntimeSubprocessController extends EventEmitter {
}
private setupListeners(): void {
if (!this.deno) {
return;
}
this.deno.stderr.on('data', this.parseError.bind(this));
this.deno.on('error', (err) => {
this.state = 'invalid';

Loading…
Cancel
Save