From 6262c7a0bf721a9e4a20f6060efa5c8df0c32d15 Mon Sep 17 00:00:00 2001 From: Asher Date: Tue, 30 Aug 2022 10:19:19 -0500 Subject: [PATCH] fix: propagate execArgv (#5510) * Use fork instead of spawn We no longer do in-place updating so no need for the spawn. The advantage of a fork is that it preserves flags like --prof which you can use to profile code-server. Also I am not sure the comment about not being able to reload in place with fork was even true to begin with. * Refresh heartbeat patch Seems to have gotten out of date a little. * Propagate execArgv to extension host This will let us profile the extension host. --- patches/exec-argv.diff | 17 +++++++++++++++++ patches/heartbeat.diff | 2 +- patches/series | 1 + src/node/wrapper.ts | 3 +-- 4 files changed, 20 insertions(+), 3 deletions(-) create mode 100644 patches/exec-argv.diff diff --git a/patches/exec-argv.diff b/patches/exec-argv.diff new file mode 100644 index 000000000..d16a446b4 --- /dev/null +++ b/patches/exec-argv.diff @@ -0,0 +1,17 @@ +Preserve process.execArgv + +This ensures flags like --prof are passed down so we can profile everything. + +Index: code-server/lib/vscode/src/vs/server/node/extensionHostConnection.ts +=================================================================== +--- code-server.orig/lib/vscode/src/vs/server/node/extensionHostConnection.ts ++++ code-server/lib/vscode/src/vs/server/node/extensionHostConnection.ts +@@ -228,7 +228,7 @@ export class ExtensionHostConnection { + + public async start(startParams: IRemoteExtensionHostStartParams): Promise { + try { +- let execArgv: string[] = []; ++ let execArgv: string[] = process.execArgv ? process.execArgv.filter(a => !/^--inspect(-brk)?=/.test(a)) : []; + if (startParams.port && !(process).pkg) { + execArgv = [`--inspect${startParams.break ? '-brk' : ''}=${startParams.port}`]; + } diff --git a/patches/heartbeat.diff b/patches/heartbeat.diff index 3208b6c3c..4a7125a7b 100644 --- a/patches/heartbeat.diff +++ b/patches/heartbeat.diff @@ -15,7 +15,7 @@ Index: code-server/lib/vscode/src/vs/base/parts/ipc/common/ipc.net.ts export const enum SocketDiagnosticsEventType { Created = 'created', -@@ -828,6 +829,19 @@ export class PersistentProtocol implemen +@@ -829,6 +830,19 @@ export class PersistentProtocol implemen this._socketDisposables.push(this._socketWriter); this._socketReader = new ProtocolReader(this._socket); this._socketDisposables.push(this._socketReader); diff --git a/patches/series b/patches/series index 8b7cc28ea..40ebf2706 100644 --- a/patches/series +++ b/patches/series @@ -21,3 +21,4 @@ telemetry.diff display-language.diff cli-window-open.diff heartbeat.diff +exec-argv.diff diff --git a/src/node/wrapper.ts b/src/node/wrapper.ts index cf64f5741..dde603462 100644 --- a/src/node/wrapper.ts +++ b/src/node/wrapper.ts @@ -317,8 +317,7 @@ export class ParentProcess extends Process { } private spawn(): cp.ChildProcess { - // Use spawn (instead of fork) to use the new binary in case it was updated. - return cp.spawn(process.argv[0], process.argv.slice(1), { + return cp.fork(path.join(__dirname, "entry"), { env: { ...process.env, CODE_SERVER_PARENT_PID: process.pid.toString(),