Skip to content

Commit

Permalink
[BUGFIX release] Prevents observer re-entry (#18462)
Browse files Browse the repository at this point in the history
[BUGFIX release] Prevents observer re-entry
  • Loading branch information
Chris Garrett authored Oct 4, 2019
2 parents 74c9da1 + 7d1e911 commit cdf85e0
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 2 deletions.
2 changes: 1 addition & 1 deletion packages/@ember/-internals/metal/lib/observer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -217,9 +217,9 @@ export function flushSyncObservers() {
observer.suspended = true;
sendEvent(target, eventName, [target, observer.path]);
} finally {
observer.suspended = false;
observer.tag = combine(getChainTagsForKey(target, observer.path));
observer.lastRevision = value(observer.tag);
observer.suspended = false;
}
}
});
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { run } from '@ember/runloop';
import { observer, get, set } from '@ember/-internals/metal';
import { alias, observer, get, set } from '@ember/-internals/metal';
import EmberObject from '../../../lib/system/object';
import { moduleFor, AbstractTestCase, runLoopSettled } from 'internal-test-helpers';

Expand Down Expand Up @@ -261,5 +261,36 @@ moduleFor(

assert.equal(changed, true, 'child should have been notified of change to path');
}

async ['@test cannot re-enter observer while it is flushing'](assert) {
let changed = false;

let Class = EmberObject.extend({
bar: 0,

get foo() {
// side effects during creation, setting a value and running through
// sync observers for a second time.
return this.incrementProperty('bar');
},

// Ensures we get `foo` eagerly when attempting to observe it
fooAlias: alias('foo'),

parentOneTwoDidChange: observer({
dependentKeys: ['fooAlias'],
fn() {
changed = true;
},
sync: true,
}),
});

let obj = Class.create();

obj.notifyPropertyChange('foo');

assert.equal(changed, true, 'observer fired successfully');
}
}
);

0 comments on commit cdf85e0

Please sign in to comment.