Skip to content

Commit 37c7f31

Browse files
eleanorjboydCopilot
andcommitted
Fix resource leaks and unhandled promise rejection from PR review
- Dispose _onDidChangeManagerEnvironment and _onDidChangeActiveEnvironment emitters in PythonEnvironmentManagers.dispose() to prevent listener leaks - Replace setImmediate(async () => await ...) with setImmediate(() => ....catch()) pattern and add traceError handler to surface failures without creating unhandled promise rejections Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent edbc422 commit 37c7f31

2 files changed

Lines changed: 7 additions & 3 deletions

File tree

src/features/envManagers.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,8 @@ export class PythonEnvironmentManagers implements EnvironmentManagers {
184184
this._onDidChangeEnvironmentManager.dispose();
185185
this._onDidChangePackageManager.dispose();
186186
this._onDidChangeEnvironments.dispose();
187+
this._onDidChangeManagerEnvironment.dispose();
188+
this._onDidChangeActiveEnvironment.dispose();
187189
this._onDidChangePackages.dispose();
188190
}
189191

src/features/pythonApi.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ import {
3030
ResolveEnvironmentContext,
3131
SetEnvironmentScope,
3232
} from '../api';
33-
import { traceInfo } from '../common/logging';
33+
import { traceError, traceInfo } from '../common/logging';
3434
import { pickEnvironmentManager } from '../common/pickers/managers';
3535
import { createDeferred } from '../common/utils/deferred';
3636
import { checkUri } from '../common/utils/pathUtils';
@@ -91,12 +91,14 @@ class PythonEnvironmentApiImpl implements PythonEnvironmentApi {
9191
if (manager.onDidChangeEnvironment) {
9292
disposables.push(
9393
manager.onDidChangeEnvironment((e) => {
94-
setImmediate(async () => {
94+
setImmediate(() => {
9595
// Refresh the central cache for this scope. This ensures that only the
9696
// *selected* manager's changes propagate (refreshEnvironment checks
9797
// getEnvironmentManager(scope) internally). It updates the cache and
9898
// fires onDidChangeActiveEnvironment, which the Python API listens to.
99-
await this.envManagers.refreshEnvironment(e.uri);
99+
this.envManagers.refreshEnvironment(e.uri).catch((err) =>
100+
traceError('Failed to refresh environment on change:', err),
101+
);
100102
});
101103
}),
102104
);

0 commit comments

Comments
 (0)