Skip to content

Commit 0ef2322

Browse files
committed
Guard against multiple login promises at the same time
1 parent 1135e5a commit 0ef2322

File tree

1 file changed

+9
-1
lines changed

1 file changed

+9
-1
lines changed

src/remote.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ export interface RemoteDetails extends vscode.Disposable {
4646
export class Remote {
4747
// Used to race between the login dialog and the logging in from a different window
4848
private loginDetectedResolver: (() => void) | undefined;
49+
private loginDetectedRejector: ((reason?: Error) => void) | undefined;
4950
private loginDetectedPromise: Promise<void> = Promise.resolve();
5051

5152
public constructor(
@@ -62,8 +63,14 @@ export class Remote {
6263
* Creates a new promise that will be resolved when login is detected in another window.
6364
*/
6465
private createLoginDetectionPromise(): void {
65-
this.loginDetectedPromise = new Promise<void>((resolve) => {
66+
if (this.loginDetectedRejector) {
67+
this.loginDetectedRejector(
68+
new Error("Login detection cancelled - new login attempt started"),
69+
);
70+
}
71+
this.loginDetectedPromise = new Promise<void>((resolve, reject) => {
6672
this.loginDetectedResolver = resolve;
73+
this.loginDetectedRejector = reject;
6774
});
6875
}
6976

@@ -74,6 +81,7 @@ export class Remote {
7481
if (this.loginDetectedResolver) {
7582
this.loginDetectedResolver();
7683
this.loginDetectedResolver = undefined;
84+
this.loginDetectedRejector = undefined;
7785
}
7886
}
7987

0 commit comments

Comments
 (0)