From 3048d17d481ea558f580abbc847d52392617dab2 Mon Sep 17 00:00:00 2001 From: Jason Grout Date: Tue, 24 Dec 2019 07:31:30 -0700 Subject: [PATCH 1/3] Be more careful about sessioncontext kernelChanged and sessionChanged signal emisssions Fixes #7690 --- packages/apputils/src/sessioncontext.tsx | 5 +++-- packages/services/src/session/default.ts | 11 +++++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/packages/apputils/src/sessioncontext.tsx b/packages/apputils/src/sessioncontext.tsx index 2b703ea3914d..62014b186ea8 100644 --- a/packages/apputils/src/sessioncontext.tsx +++ b/packages/apputils/src/sessioncontext.tsx @@ -766,8 +766,10 @@ export class SessionContext implements ISessionContext { if (this._session) { this._session.dispose(); } + const oldValue = this._session; this._session = null; - this._terminated.emit(undefined); + const newValue = this._session; + this._sessionChanged.emit({ name: 'session', oldValue, newValue }); } /** @@ -873,7 +875,6 @@ export class SessionContext implements ISessionContext { private _initializing = false; private _initPromise = new PromiseDelegate(); private _isReady = false; - private _terminated = new Signal(this); private _kernelChanged = new Signal< this, Session.ISessionConnection.IKernelChangedArgs diff --git a/packages/services/src/session/default.ts b/packages/services/src/session/default.ts index cdaf875c096b..b797ef3eaf78 100644 --- a/packages/services/src/session/default.ts +++ b/packages/services/src/session/default.ts @@ -206,8 +206,15 @@ export class SessionConnection implements Session.ISessionConnection { } this._isDisposed = true; this._disposed.emit(); - this._kernel?.dispose(); - this._kernel = null; + + if (this._kernel) { + this._kernel.dispose(); + let oldValue = this._kernel; + this._kernel = null; + let newValue = this._kernel; + this._kernelChanged.emit({ name: 'kernel', oldValue, newValue }); + } + Signal.clearData(this); } From 75c4e4b53e8075225e5d8a37a252045ed5dc99b3 Mon Sep 17 00:00:00 2001 From: Jason Grout Date: Tue, 24 Dec 2019 07:42:17 -0700 Subject: [PATCH 2/3] More careful sessioncontext dispose logic --- packages/apputils/src/sessioncontext.tsx | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/apputils/src/sessioncontext.tsx b/packages/apputils/src/sessioncontext.tsx index 62014b186ea8..bd6b5ff1bac0 100644 --- a/packages/apputils/src/sessioncontext.tsx +++ b/packages/apputils/src/sessioncontext.tsx @@ -512,6 +512,8 @@ export class SessionContext implements ISessionContext { return; } this._isDisposed = true; + this._disposed.emit(); + if (this._session) { if (this.kernelPreference.shutdownOnDispose) { // Fire and forget the session shutdown request @@ -531,7 +533,6 @@ export class SessionContext implements ISessionContext { this._busyDisposable.dispose(); this._busyDisposable = null; } - this._disposed.emit(); Signal.clearData(this); } @@ -765,11 +766,11 @@ export class SessionContext implements ISessionContext { private _onSessionDisposed(): void { if (this._session) { this._session.dispose(); + const oldValue = this._session; + this._session = null; + const newValue = this._session; + this._sessionChanged.emit({ name: 'session', oldValue, newValue }); } - const oldValue = this._session; - this._session = null; - const newValue = this._session; - this._sessionChanged.emit({ name: 'session', oldValue, newValue }); } /** From 303abb4c815b7fafbb6313e2d44391f90989c1a3 Mon Sep 17 00:00:00 2001 From: Jason Grout Date: Tue, 24 Dec 2019 08:51:10 -0700 Subject: [PATCH 3/3] Save the intended console path, preventing doubling of consoles each refresh. Before, the save would happen before the session was created, which meant that the args values would be undefined, so new consoles would be created on refresh, plus the existing sessions would be displayed, doubling the number of consoles every refresh. Fixes #7693 --- packages/console-extension/src/index.ts | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/packages/console-extension/src/index.ts b/packages/console-extension/src/index.ts index 7ab55ddbaa41..c533ad85e6c8 100644 --- a/packages/console-extension/src/index.ts +++ b/packages/console-extension/src/index.ts @@ -162,17 +162,19 @@ async function activateConsole( // Handle state restoration. void restorer.restore(tracker, { command: CommandIDs.create, - args: widget => ({ - path: widget.content.console.sessionContext.session?.path, - name: widget.content.console.sessionContext.session?.name, - kernelPreference: { - name: widget.content.console.sessionContext.kernelPreference.name, - language: - widget.content.console.sessionContext.kernelPreference.language - } - }), - name: widget => - widget.content.console.sessionContext.session?.path ?? UUID.uuid4(), + args: widget => { + const { + path, + name, + kernelPreference + } = widget.content.console.sessionContext; + return { + path, + name, + kernelPreference: { ...kernelPreference } + }; + }, + name: widget => widget.content.console.sessionContext.path ?? UUID.uuid4(), when: manager.ready });