From d6da505f4e044f8a487ac27a3ec707c11853ee0a Mon Sep 17 00:00:00 2001 From: Igor Minar Date: Fri, 30 Nov 2012 01:16:08 +0100 Subject: fix(Scope): ensure that a scope is destroyed only once Due to bd524fc4 calling $destroy() on a scope mupltiple times cases NPE. Closes #1627 --- src/ng/rootScope.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src/ng/rootScope.js') diff --git a/src/ng/rootScope.js b/src/ng/rootScope.js index de4b7407..c99416f0 100644 --- a/src/ng/rootScope.js +++ b/src/ng/rootScope.js @@ -134,6 +134,7 @@ function $RootScopeProvider(){ this.$$nextSibling = this.$$prevSibling = this.$$childHead = this.$$childTail = null; this['this'] = this.$root = this; + this.$$destroyed = false; this.$$asyncQueue = []; this.$$listeners = {}; } @@ -467,10 +468,12 @@ function $RootScopeProvider(){ * perform any necessary cleanup. */ $destroy: function() { - if ($rootScope == this) return; // we can't remove the root node; + // we can't destroy the root scope or a scope that has been already destroyed + if ($rootScope == this || this.$$destroyed) return; var parent = this.$parent; this.$broadcast('$destroy'); + this.$$destroyed = true; if (parent.$$childHead == this) parent.$$childHead = this.$$nextSibling; if (parent.$$childTail == this) parent.$$childTail = this.$$prevSibling; -- cgit v1.2.3