Fix wrapper.start not actually waiting for anything

This commit is contained in:
Asher 2020-09-14 17:22:24 -05:00
parent 0a8e71c647
commit bb1bf88439
No known key found for this signature in database
GPG Key ID: D63C1EF81242354A
1 changed files with 26 additions and 21 deletions

View File

@ -208,9 +208,16 @@ export class WrapperProcess {
this.relaunch() this.relaunch()
}) })
} }
if (!this.started) { if (!this.started) {
this.started = this.spawn().then((child) => { this.started = this._start()
}
return this.started
}
private async _start(): Promise<void> {
const child = this.spawn()
this.process = child
// Log both to stdout and to the log directory. // Log both to stdout and to the log directory.
if (child.stdout) { if (child.stdout) {
child.stdout.pipe(this.logStdoutStream) child.stdout.pipe(this.logStdoutStream)
@ -220,20 +227,18 @@ export class WrapperProcess {
child.stderr.pipe(this.logStderrStream) child.stderr.pipe(this.logStderrStream)
child.stderr.pipe(process.stderr) child.stderr.pipe(process.stderr)
} }
logger.debug(`spawned inner process ${child.pid}`) logger.debug(`spawned inner process ${child.pid}`)
ipcMain.handshake(child).then(() => {
await ipcMain.handshake(child)
child.once("exit", (code) => { child.once("exit", (code) => {
logger.debug(`inner process ${child.pid} exited unexpectedly`) logger.debug(`inner process ${child.pid} exited unexpectedly`)
ipcMain.exit(code || 0) ipcMain.exit(code || 0)
}) })
})
this.process = child
})
}
return this.started
} }
private async spawn(): Promise<cp.ChildProcess> { private spawn(): cp.ChildProcess {
// Flags to pass along to the Node binary. // Flags to pass along to the Node binary.
let nodeOptions = `${process.env.NODE_OPTIONS || ""} ${(this.options && this.options.nodeOptions) || ""}` let nodeOptions = `${process.env.NODE_OPTIONS || ""} ${(this.options && this.options.nodeOptions) || ""}`
if (!/max_old_space_size=(\d+)/g.exec(nodeOptions)) { if (!/max_old_space_size=(\d+)/g.exec(nodeOptions)) {