Przeglądaj źródła

Angular tweaks to work around chrome GC bug

Rashid Khan 12 lat temu
rodzic
commit
1f1959d9b3

+ 5 - 0
src/app/directives/addPanel.js

@@ -12,6 +12,11 @@ function (angular, app, _) {
       return {
         restrict: 'A',
         link: function($scope, elem) {
+
+          $scope.$on("$destroy",function() {
+            elem.remove();
+          });
+
           $scope.$watch('panel.type', function() {
             var _type = $scope.panel.type;
             $scope.reset_panel(_type);

+ 0 - 1
src/app/directives/kibanaPanel.js

@@ -13,7 +13,6 @@ function (angular) {
 
         '<div class="row-fluid panel-extra"><div class="panel-extra-container">' +
 
-
           '<span class="extra row-button" ng-show="panel.editable != false">' +
             '<span confirm-click="row.panels = _.without(row.panels,panel)" '+
             'confirmation="Are you sure you want to remove this {{panel.type}} panel?" class="pointer">'+

+ 17 - 0
src/vendor/angular/angular.js

@@ -8464,6 +8464,21 @@ function $RootScopeProvider(){
         } else {
           this.$$childHead = this.$$childTail = child;
         }
+
+        // RASHID: Fix for chrome GC bug
+        child.$on('$destroy', function() {
+          if(Child)
+            Child.prototype = null;
+          // Async so that the $broadcast('$destroy') can traverse the rest
+          setTimeout(function() {
+            child.__proto__ = {};
+            for(var i in child)
+              child[i] = null;
+            child = null;
+            return null;
+          });
+        });
+
         return child;
       },
 
@@ -8893,6 +8908,8 @@ function $RootScopeProvider(){
         // see: https://github.com/angular/angular.js/issues/1313#issuecomment-10378451
         this.$parent = this.$$nextSibling = this.$$prevSibling = this.$$childHead =
             this.$$childTail = null;
+        parent = this.$$nextSibling = this.$$prevSibling = this.$$childHead =
+            this.$$childTail = null;
       },
 
       /**