From 8107e853feca5a8b562d4146339c943cb38ce8d2 Mon Sep 17 00:00:00 2001 From: Godfrey Chan Date: Thu, 14 Dec 2017 07:32:43 -0800 Subject: [PATCH 1/2] Revert "[BUGFIX release] fix issue with unchaining ChainNodes" This reverts commit 1396becfc2f19045ae88b33888f46b102b3faf2f. From @krisselden > This is a serious bug and this doesn't actually fix the issue, > some refactoring to ember-metal has caused overriding watch to > issue unbalanced watch/unwatch calls. It needs to be bisected. --- packages/ember-metal/lib/chains.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/packages/ember-metal/lib/chains.js b/packages/ember-metal/lib/chains.js index db34d74561f..fc3c4c02c6f 100644 --- a/packages/ember-metal/lib/chains.js +++ b/packages/ember-metal/lib/chains.js @@ -209,11 +209,8 @@ class ChainNode { remove(path) { let paths = this._paths; if (paths === undefined) { return; } - if (paths[path] > 0) { paths[path]--; - } else { - return; } let key = firstKey(path); From ac10de2953edf070d12f229070a857b8bbb11a5d Mon Sep 17 00:00:00 2001 From: Godfrey Chan Date: Thu, 14 Dec 2017 07:40:35 -0800 Subject: [PATCH 2/2] Fix unbalanced chaining When mutating the chains (`remove()` here) we must call `writableChains()` to "fork" it from the parent. --- packages/ember-metal/lib/watch_path.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ember-metal/lib/watch_path.js b/packages/ember-metal/lib/watch_path.js index 2976ca830ab..ba590955c37 100644 --- a/packages/ember-metal/lib/watch_path.js +++ b/packages/ember-metal/lib/watch_path.js @@ -29,7 +29,7 @@ export function unwatchPath(obj, keyPath, meta) { if (counter === 1) { m.writeWatching(keyPath, 0); - m.readableChains().remove(keyPath); + m.writableChains(makeChainNode).remove(keyPath); } else if (counter > 1) { m.writeWatching(keyPath, counter - 1); }