diff --git a/src/commands/startLanguageServer.ts b/src/commands/startLanguageServer.ts
index 09777b0..565b42c 100644
--- a/src/commands/startLanguageServer.ts
+++ b/src/commands/startLanguageServer.ts
@@ -22,6 +22,9 @@
 	updateRestartHistory
 } from '../language/goLanguageServer';
 import { LegacyLanguageService } from '../language/registerDefaultProviders';
+import { Mutex } from '../utils/mutex';
+
+const languageServerStartMutex = new Mutex();
 
 export function startLanguageServer(ctx: vscode.ExtensionContext, goCtx: GoExtensionContext) {
 	return async (reason?: RestartReason) => {
@@ -32,7 +35,7 @@
 			updateRestartHistory(goCtx, reason, cfg.enabled);
 		}
 
-		const unlock = await goCtx.languageServerStartMutex.lock();
+		const unlock = await languageServerStartMutex.lock();
 		try {
 			// If the client has already been started, make sure to clear existing
 			// diagnostics and stop it.
diff --git a/src/context.ts b/src/context.ts
index a1bff86..bc602d4 100644
--- a/src/context.ts
+++ b/src/context.ts
@@ -8,7 +8,6 @@
 
 import { LanguageServerConfig, Restart, ServerInfo } from './language/goLanguageServer';
 import { LegacyLanguageService } from './language/registerDefaultProviders';
-import { Mutex } from './utils/mutex';
 
 // Global variables used for management of the language client.
 // They are global so that the server can be easily restarted with
@@ -29,5 +28,4 @@
 	crashCount: number;
 	// Some metrics for automated issue reports:
 	restartHistory: Restart[];
-	languageServerStartMutex: Mutex;
 }
diff --git a/src/goMain.ts b/src/goMain.ts
index 336327e..38909e1 100644
--- a/src/goMain.ts
+++ b/src/goMain.ts
@@ -112,7 +112,6 @@
 import { GoExplorerProvider } from './goExplorer';
 import { VulncheckProvider } from './goVulncheck';
 
-import { Mutex } from './utils/mutex';
 import { GoExtensionContext } from './context';
 import * as commands from './commands';
 
@@ -121,8 +120,7 @@
 export const goCtx: GoExtensionContext = {
 	lastUserAction: new Date(),
 	crashCount: 0,
-	restartHistory: [],
-	languageServerStartMutex: new Mutex()
+	restartHistory: []
 };
 
 export let buildDiagnosticCollection: vscode.DiagnosticCollection;
diff --git a/test/gopls/extension.test.ts b/test/gopls/extension.test.ts
index a111fcd..5a9b9e4 100644
--- a/test/gopls/extension.test.ts
+++ b/test/gopls/extension.test.ts
@@ -16,7 +16,6 @@
 } from '../../src/language/goLanguageServer';
 import sinon = require('sinon');
 import { getGoVersion, GoVersion } from '../../src/util';
-import { Mutex } from '../../src/utils/mutex';
 import { GoExtensionContext } from '../../src/context';
 
 // FakeOutputChannel is a fake output channel used to buffer
@@ -97,8 +96,7 @@
 		const goCtx: GoExtensionContext = {
 			lastUserAction: new Date(),
 			crashCount: 0,
-			restartHistory: [],
-			languageServerStartMutex: new Mutex()
+			restartHistory: []
 		};
 		// file path to open.
 		this.fakeOutputChannel = new FakeOutputChannel();
diff --git a/test/gopls/survey.test.ts b/test/gopls/survey.test.ts
index 128e616..f8bbf7a 100644
--- a/test/gopls/survey.test.ts
+++ b/test/gopls/survey.test.ts
@@ -9,7 +9,6 @@
 import goLanguageServer = require('../../src/language/goLanguageServer');
 import goSurvey = require('../../src/goSurvey');
 import goDeveloperSurvey = require('../../src/goDeveloperSurvey');
-import { Mutex } from '../../src/utils/mutex';
 import { GoExtensionContext } from '../../src/context';
 
 suite('gopls survey tests', () => {
@@ -223,8 +222,7 @@
 			const goCtx: GoExtensionContext = {
 				lastUserAction: new Date(),
 				crashCount: 0,
-				restartHistory: [],
-				languageServerStartMutex: new Mutex()
+				restartHistory: []
 			};
 			const stub = sandbox.stub(vscode.window, 'showInformationMessage').resolves({ title: choice });
 			const getGoplsOptOutConfigStub = sandbox.stub(goLanguageServer, 'getGoplsOptOutConfig').returns(testConfig);
diff --git a/test/integration/codelens.test.ts b/test/integration/codelens.test.ts
index 31500ef..44a6284 100644
--- a/test/integration/codelens.test.ts
+++ b/test/integration/codelens.test.ts
@@ -16,7 +16,6 @@
 import { GoRunTestCodeLensProvider } from '../../src/goRunTestCodelens';
 import { subTestAtCursor } from '../../src/goTest';
 import { getCurrentGoPath, getGoVersion } from '../../src/util';
-import { Mutex } from '../../src/utils/mutex';
 
 suite('Code lenses for testing and benchmarking', function () {
 	this.timeout(20000);
@@ -36,8 +35,7 @@
 		const goCtx: GoExtensionContext = {
 			lastUserAction: new Date(),
 			crashCount: 0,
-			restartHistory: [],
-			languageServerStartMutex: new Mutex()
+			restartHistory: []
 		};
 		await updateGoVarsFromConfig(goCtx);
 
diff --git a/test/integration/coverage.test.ts b/test/integration/coverage.test.ts
index fbbaf65..750fa1d 100644
--- a/test/integration/coverage.test.ts
+++ b/test/integration/coverage.test.ts
@@ -13,7 +13,6 @@
 import path = require('path');
 import sinon = require('sinon');
 import vscode = require('vscode');
-import { Mutex } from '../../src/utils/mutex';
 import { GoExtensionContext } from '../../src/context';
 
 // The ideal test would check that each open editor containing a file with coverage
@@ -30,8 +29,7 @@
 		const goCtx: GoExtensionContext = {
 			lastUserAction: new Date(),
 			crashCount: 0,
-			restartHistory: [],
-			languageServerStartMutex: new Mutex()
+			restartHistory: []
 		};
 		await updateGoVarsFromConfig(goCtx);
 
diff --git a/test/integration/extension.test.ts b/test/integration/extension.test.ts
index 574e911..157825f 100644
--- a/test/integration/extension.test.ts
+++ b/test/integration/extension.test.ts
@@ -50,7 +50,6 @@
 import cp = require('child_process');
 import os = require('os');
 import { GoExtensionContext } from '../../src/context';
-import { Mutex } from '../../src/utils/mutex';
 
 const testAll = (isModuleMode: boolean) => {
 	const dummyCancellationSource = new vscode.CancellationTokenSource();
@@ -73,8 +72,7 @@
 		const goCtx: GoExtensionContext = {
 			lastUserAction: new Date(),
 			crashCount: 0,
-			restartHistory: [],
-			languageServerStartMutex: new Mutex()
+			restartHistory: []
 		};
 		await updateGoVarsFromConfig(goCtx);
 
diff --git a/test/integration/goDebugConfiguration.test.ts b/test/integration/goDebugConfiguration.test.ts
index 98b5a24..2865674 100644
--- a/test/integration/goDebugConfiguration.test.ts
+++ b/test/integration/goDebugConfiguration.test.ts
@@ -15,7 +15,6 @@
 import { MockCfg } from '../mocks/MockCfg';
 import { extensionId } from '../../src/const';
 import { GoExtensionContext } from '../../src/context';
-import { Mutex } from '../../src/utils/mutex';
 
 suite('Debug Environment Variable Merge Test', () => {
 	const debugConfigProvider = new GoDebugConfigurationProvider();
@@ -28,8 +27,7 @@
 		const goCtx: GoExtensionContext = {
 			lastUserAction: new Date(),
 			crashCount: 0,
-			restartHistory: [],
-			languageServerStartMutex: new Mutex()
+			restartHistory: []
 		};
 		await updateGoVarsFromConfig(goCtx);
 		await vscode.workspace.openTextDocument(vscode.Uri.file(filePath));
diff --git a/test/integration/statusbar.test.ts b/test/integration/statusbar.test.ts
index bf97017..e6f669d 100644
--- a/test/integration/statusbar.test.ts
+++ b/test/integration/statusbar.test.ts
@@ -28,15 +28,13 @@
 import ourutil = require('../../src/util');
 import { GoExtensionContext } from '../../src/context';
 import { setGOROOTEnvVar } from '../../src/goMain';
-import { Mutex } from '../../src/utils/mutex';
 
 describe('#initGoStatusBar()', function () {
 	this.beforeAll(async () => {
 		const goCtx: GoExtensionContext = {
 			lastUserAction: new Date(),
 			crashCount: 0,
-			restartHistory: [],
-			languageServerStartMutex: new Mutex()
+			restartHistory: []
 		};
 		await updateGoVarsFromConfig(goCtx); // should initialize the status bar.
 	});
