Skip to content

Commit 67d7cbc

Browse files
authored
1 parent f6a5c0c commit 67d7cbc

File tree

2 files changed

+29
-5
lines changed

2 files changed

+29
-5
lines changed

src/vs/base/common/observableImpl/autorun.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -128,12 +128,13 @@ export class AutorunObserver<TChangeSummary = any> implements IObserver, IReader
128128

129129
this.state = AutorunState.upToDate;
130130

131-
getLogger()?.handleAutorunTriggered(this);
132-
133131
try {
134-
const changeSummary = this.changeSummary!;
135-
this.changeSummary = this.createChangeSummary?.();
136-
this.runFn(this, changeSummary);
132+
if (!this.disposed) {
133+
getLogger()?.handleAutorunTriggered(this);
134+
const changeSummary = this.changeSummary!;
135+
this.changeSummary = this.createChangeSummary?.();
136+
this.runFn(this, changeSummary);
137+
}
137138
} finally {
138139
// We don't want our observed observables to think that they are (not even temporarily) not being observed.
139140
// Thus, we only unsubscribe from observables that are definitely not read anymore.

src/vs/base/test/common/observable.test.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -992,6 +992,29 @@ suite('observables', () => {
992992
'event fired',
993993
]);
994994
});
995+
996+
test('dont run autorun after dispose', () => {
997+
const log = new Log();
998+
const myObservable = new LoggingObservableValue('myObservable', 0, log);
999+
1000+
const d = autorun('update', reader => {
1001+
const v = myObservable.read(reader);
1002+
log.log('autorun, myObservable:' + v);
1003+
});
1004+
1005+
transaction(tx => {
1006+
myObservable.set(1, tx);
1007+
d.dispose();
1008+
});
1009+
1010+
assert.deepStrictEqual(log.getAndClearEntries(), [
1011+
'myObservable.firstObserverAdded',
1012+
'myObservable.get',
1013+
'autorun, myObservable:0',
1014+
'myObservable.set (value 1)',
1015+
'myObservable.lastObserverRemoved',
1016+
]);
1017+
});
9951018
});
9961019

9971020
export class LoggingObserver implements IObserver {

0 commit comments

Comments
 (0)