diff options
| author | Noam Lewis | 2013-12-30 20:10:23 -0500 | 
|---|---|---|
| committer | Jeff Cross | 2014-01-13 09:53:38 -0800 | 
| commit | 2cd09c9f0e7766bcd191662841b7b1ffc3b6dc3f (patch) | |
| tree | a4cd4eebf7376ebd9370fe96f2cabb28f74e74eb /src/ng/rootScope.js | |
| parent | 34fee06ca7db16549764f53c0382f2b6e2482201 (diff) | |
| download | angular.js-2cd09c9f0e7766bcd191662841b7b1ffc3b6dc3f.tar.bz2 | |
fix($rootScope): prevent infinite $digest by checking if asyncQueue is empty when decrementing ttl
An infinite $digest loop can be caused by expressions that invoke a promise.
The problem is that $digest does not decrement ttl unless it finds dirty changes;
it should check also if asyncQueue is empty.
Generally the condition for decrementing ttl should be the same as the
condition for terminating the $digest loop.
Fixes #2622
Diffstat (limited to 'src/ng/rootScope.js')
| -rw-r--r-- | src/ng/rootScope.js | 2 | 
1 files changed, 1 insertions, 1 deletions
| diff --git a/src/ng/rootScope.js b/src/ng/rootScope.js index 8259bf88..bbf290b2 100644 --- a/src/ng/rootScope.js +++ b/src/ng/rootScope.js @@ -632,7 +632,7 @@ function $RootScopeProvider(){            // `break traverseScopesLoop;` takes us to here -          if(dirty && !(ttl--)) { +          if((dirty || asyncQueue.length) && !(ttl--)) {              clearPhase();              throw $rootScopeMinErr('infdig',                  '{0} $digest() iterations reached. Aborting!\n' + | 
