This is an automated email from the ASF dual-hosted git repository. harbs pushed a commit to branch develop in repository https://gitbox.apache.org/repos/asf/royale-asjs.git
The following commit(s) were added to refs/heads/develop by this push: new 2e4b949 Add method finalizeThis() to IViewCursor, and fix memory leak in MX ADG due to event listener leak due to lack of weak references in JS. new 3eac85b Merge pull request #1030 from estanglerbm/adg-eventhandler-leak 2e4b949 is described below commit 2e4b949f14f0c9aa18f996d9e827050d43246406 Author: Edward Stangler <estang...@bradmark.com> AuthorDate: Sun Jan 3 07:54:22 2021 -0600 Add method finalizeThis() to IViewCursor, and fix memory leak in MX ADG due to event listener leak due to lack of weak references in JS. --- .../mx/collections/HierarchicalCollectionViewCursor.as | 15 +++++++++++++++ .../src/main/royale/mx/collections/IViewCursor.as | 11 +++++++++++ .../src/main/royale/mx/collections/LeafNodeCursor.as | 14 ++++++++++++++ .../src/main/royale/mx/collections/ListCollectionView.as | 14 ++++++++++++++ ...ndererFactoryForICollectionViewAdvancedDataGridData.as | 3 ++- .../mx/controls/treeClasses/HierarchicalViewCursor.as | 15 +++++++++++++++ 6 files changed, 71 insertions(+), 1 deletion(-) diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/collections/HierarchicalCollectionViewCursor.as b/frameworks/projects/MXRoyale/src/main/royale/mx/collections/HierarchicalCollectionViewCursor.as index a2e37f0..9be0e3e 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/mx/collections/HierarchicalCollectionViewCursor.as +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/collections/HierarchicalCollectionViewCursor.as @@ -93,6 +93,21 @@ public class HierarchicalCollectionViewCursor extends EventDispatcher //check to see if the model has more than one top level items more = model.length > 1; } + + /** + * Finalizes the cursor, to clean up resources. + * Required because weak references are not available in JS. + * + * @langversion 3.0 + * @playerversion Flash 9 + * @playerversion AIR 1.1 + * @productversion Royale 0.9.8 + */ + public function finalizeThis():void + { + if (modelCursor) modelCursor.finalizeThis(); + if (collection) collection.removeEventListener(CollectionEvent.COLLECTION_CHANGE, collectionChangeHandler); + } //-------------------------------------------------------------------------- // diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/collections/IViewCursor.as b/frameworks/projects/MXRoyale/src/main/royale/mx/collections/IViewCursor.as index 24a6e7d..09f602e 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/mx/collections/IViewCursor.as +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/collections/IViewCursor.as @@ -167,6 +167,17 @@ public interface IViewCursor extends IEventDispatcher //-------------------------------------------------------------------------- /** + * Finalizes the cursor, to clean up resources. + * Required because weak references are not available in JS. + * + * @langversion 3.0 + * @playerversion Flash 9 + * @playerversion AIR 1.1 + * @productversion Royale 0.9.8 + */ + function finalizeThis():void; + + /** * Finds an item with the specified properties within the collection * and positions the cursor to that item. * If the item cannot be found, the cursor location does not change. diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/collections/LeafNodeCursor.as b/frameworks/projects/MXRoyale/src/main/royale/mx/collections/LeafNodeCursor.as index b4d669d..4fc538c 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/mx/collections/LeafNodeCursor.as +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/collections/LeafNodeCursor.as @@ -84,6 +84,20 @@ public class LeafNodeCursor extends EventDispatcher } + /** + * Finalizes the cursor, to clean up resources. + * Required because weak references are not available in JS. + * + * @langversion 3.0 + * @playerversion Flash 9 + * @playerversion AIR 1.1 + * @productversion Royale 0.9.8 + */ + public function finalizeThis():void + { + if (modelCursor) modelCursor.finalizeThis(); + } + //-------------------------------------------------------------------------- // // Variables diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/collections/ListCollectionView.as b/frameworks/projects/MXRoyale/src/main/royale/mx/collections/ListCollectionView.as index 6738376..63ec5e8 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/mx/collections/ListCollectionView.as +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/collections/ListCollectionView.as @@ -2069,6 +2069,20 @@ class ListCollectionViewCursor extends EventDispatcher implements IViewCursor */ } } + + /** + * Finalizes the cursor, to clean up resources. + * Required because weak references are not available in JS. + * + * @langversion 3.0 + * @playerversion Flash 9 + * @playerversion AIR 1.1 + * @productversion Royale 0.9.8 + */ + public function finalizeThis():void + { + if (_view) _view.removeEventListener(CollectionEvent.COLLECTION_CHANGE, collectionEventHandler); + } //-------------------------------------------------------------------------- // diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/DataItemRendererFactoryForICollectionViewAdvancedDataGridData.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/DataItemRendererFactoryForICollectionViewAdvancedDataGridData.as index 2d5d587..b3ec5f8 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/DataItemRendererFactoryForICollectionViewAdvancedDataGridData.as +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/DataItemRendererFactoryForICollectionViewAdvancedDataGridData.as @@ -97,7 +97,8 @@ package mx.controls.advancedDataGridClasses var dp:ICollectionView = dataProviderModel.dataProvider as ICollectionView; if (!dp) return; - + + if (cursor) cursor.finalizeThis(); cursor = dp.createCursor(); currentIndex = (dp.length > 0) ? 0 : -1; diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/treeClasses/HierarchicalViewCursor.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/treeClasses/HierarchicalViewCursor.as index b89c206..97969ca 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/treeClasses/HierarchicalViewCursor.as +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/treeClasses/HierarchicalViewCursor.as @@ -86,6 +86,21 @@ public class HierarchicalViewCursor extends EventDispatcher more = model.length > 1; } + /** + * Finalizes the cursor, to clean up resources. + * Required because weak references are not available in JS. + * + * @langversion 3.0 + * @playerversion Flash 9 + * @playerversion AIR 1.1 + * @productversion Royale 0.9.8 + */ + public function finalizeThis():void + { + if (modelCursor) modelCursor.finalizeThis(); + if (collection) collection.removeEventListener(CollectionEvent.COLLECTION_CHANGE, collectionChangeHandler); + } + //-------------------------------------------------------------------------- // // Variables