fix listener leaks (#17913)

* fix listener leaks

* add null check

* simplify

* pr comments
This commit is contained in:
Alan Ren
2021-12-14 13:35:00 -08:00
committed by GitHub
parent 2b1acbc2c7
commit 970fe12e70
7 changed files with 59 additions and 43 deletions

View File

@@ -11,6 +11,7 @@ import { ConnectionProfile } from 'sql/platform/connection/common/connectionProf
import { ConnectionProfileGroup, IConnectionProfileGroup } from 'sql/platform/connection/common/connectionProfileGroup';
import { IConnectionProfile, ProfileMatcher } from 'sql/platform/connection/common/interfaces';
import { ICredentialsService } from 'sql/platform/credentials/common/credentialsService';
import { isDisposable } from 'vs/base/common/lifecycle';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage';
@@ -112,6 +113,9 @@ export class ConnectionStore {
// Add the profile to the saved list, taking care to clear out the password field if necessary
const savedProfile = forceWritePlaintextPassword ? profile : this.getProfileWithoutPassword(profile);
const savedConnectionProfile = await this.saveProfileToConfig(savedProfile, matcher);
if (isDisposable(savedProfile)) {
savedProfile.dispose();
}
profile.groupId = savedConnectionProfile.groupId;
profile.id = savedConnectionProfile.id;
// Only save if we successfully added the profile
@@ -177,9 +181,9 @@ export class ConnectionStore {
public getProfileWithoutPassword(conn: IConnectionProfile): ConnectionProfile {
let savedConn = ConnectionProfile.fromIConnectionProfile(this.capabilitiesService, conn);
savedConn = savedConn.withoutPassword();
return savedConn;
let newSavedConn = savedConn.withoutPassword();
savedConn.dispose();
return newSavedConn;
}
/**
@@ -225,7 +229,9 @@ export class ConnectionStore {
list.unshift(savedProfile);
return list.filter(n => n !== undefined).map(c => c.toIConnectionProfile());
const profiles = list.filter(n => n !== undefined).map(c => c.toIConnectionProfile());
list.forEach(c => c.dispose());
return profiles;
}
private removeFromConnectionList(conn: IConnectionProfile, list: ConnectionProfile[]): IConnectionProfile[] {