Skip to content

Commit 5cfe44b

Browse files
authored
Merge pull request microsoft#128541 from microsoft/alex/128528
Skip acquiring workspace storage locks on the local nodejs extension host
2 parents ab824c2 + 7519b4c commit 5cfe44b

File tree

4 files changed

+13
-1
lines changed

4 files changed

+13
-1
lines changed

src/vs/workbench/api/common/extHost.protocol.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ export interface IEnvironment {
7676
globalStorageHome: URI;
7777
workspaceStorageHome: URI;
7878
useHostProxy?: boolean;
79+
skipWorkspaceStorageLock?: boolean;
7980
}
8081

8182
export interface IStaticWorkspaceData {

src/vs/workbench/api/node/extHostStoragePaths.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@ export class ExtensionStoragePaths extends CommonExtensionStoragePaths {
2222
return workspaceStorageURI;
2323
}
2424

25+
if (this._environment.skipWorkspaceStorageLock) {
26+
this._logService.info(`Skipping acquiring lock for ${workspaceStorageURI.fsPath}.`);
27+
return workspaceStorageURI;
28+
}
29+
2530
const workspaceStorageBase = workspaceStorageURI.fsPath;
2631
let attempt = 0;
2732
do {

src/vs/workbench/services/extensions/electron-browser/localProcessExtensionHost.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ export class LocalProcessExtensionHost implements IExtensionHost {
238238
}
239239

240240
// Run Extension Host as fork of current process
241-
this._extensionHostProcess = fork(FileAccess.asFileUri('bootstrap-fork', require).fsPath, ['--type=extensionHost'], opts);
241+
this._extensionHostProcess = fork(FileAccess.asFileUri('bootstrap-fork', require).fsPath, ['--type=extensionHost', '--skipWorkspaceStorageLock'], opts);
242242

243243
// Catch all output coming from the extension host process
244244
type Output = { data: string, format: string[] };

src/vs/workbench/services/extensions/node/extensionHostProcessSetup.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,14 @@ import { Promises } from 'vs/base/node/pfs';
2222
import { realpath } from 'vs/base/node/extpath';
2323
import { IHostUtils } from 'vs/workbench/api/common/extHostExtensionService';
2424
import { RunOnceScheduler } from 'vs/base/common/async';
25+
import { boolean } from 'vs/editor/common/config/editorOptions';
2526

2627
import 'vs/workbench/api/common/extHost.common.services';
2728
import 'vs/workbench/api/node/extHost.node.services';
2829

2930
interface ParsedExtHostArgs {
3031
uriTransformerPath?: string;
32+
skipWorkspaceStorageLock?: boolean;
3133
useHostProxy?: string;
3234
}
3335

@@ -46,6 +48,9 @@ const args = minimist(process.argv.slice(2), {
4648
string: [
4749
'uriTransformerPath',
4850
'useHostProxy'
51+
],
52+
boolean: [
53+
'skipWorkspaceStorageLock'
4954
]
5055
}) as ParsedExtHostArgs;
5156

@@ -323,6 +328,7 @@ export async function startExtensionHostProcess(): Promise<void> {
323328
// setup things
324329
patchProcess(!!initData.environment.extensionTestsLocationURI); // to support other test frameworks like Jasmin that use process.exit (https://github.com/microsoft/vscode/issues/37708)
325330
initData.environment.useHostProxy = args.useHostProxy !== undefined ? args.useHostProxy !== 'false' : undefined;
331+
initData.environment.skipWorkspaceStorageLock = boolean(args.skipWorkspaceStorageLock, false);
326332

327333
// host abstraction
328334
const hostUtils = new class NodeHost implements IHostUtils {

0 commit comments

Comments
 (0)