src/goDebugFactory.ts: send terminated event on server start error
If there was an error starting or connecting to the server, we need
to send a terminated event and error to the client to ensure that
the client knows there is no debug process running.
Fixes golang/vscode-go#1413
Change-Id: I4aa5166fd126f5546bb43fb3ad563fc9f9ca93b7
Reviewed-on: https://go-review.googlesource.com/c/vscode-go/+/309809
Trust: Suzy Mueller <suzmue@golang.org>
Run-TryBot: Suzy Mueller <suzmue@golang.org>
TryBot-Result: kokoro <noreply+kokoro@google.com>
Reviewed-by: Hyang-Ah Hana Kim <hyangah@gmail.com>
diff --git a/src/goDebugFactory.ts b/src/goDebugFactory.ts
index 74d009e..47c79be 100644
--- a/src/goDebugFactory.ts
+++ b/src/goDebugFactory.ts
@@ -173,8 +173,19 @@
if (!this.connected) {
this.connected = this.startAndConnectToServer();
}
- await this.connected;
- super.sendMessageToServer(message);
+ try {
+ await this.connected;
+ super.sendMessageToServer(message);
+ } catch (err) {
+ // If there was an error connecting, show an error message
+ // and send a terminated event, since we cannot start.
+ if (err) {
+ const errMsg = `connect to server error: ${err}`;
+ this.sendMessageToClient(new OutputEvent(errMsg));
+ vscode.window.showErrorMessage(errMsg);
+ }
+ this.sendMessageToClient(new TerminatedEvent());
+ }
}
async dispose() {
@@ -185,6 +196,9 @@
}
this.connected = undefined;
const dlvDapServer = this.dlvDapServer;
+ if (!dlvDapServer) {
+ return;
+ }
if (dlvDapServer.exitCode !== null) {
console.log(`dlv dap process(${dlvDapServer.pid}) exited ${dlvDapServer.exitCode}`);
return;