From 2196eaa81b802d95c2001cfb6f981ad34fa714aa Mon Sep 17 00:00:00 2001 From: Francis Duvivier Date: Fri, 17 Jan 2020 14:16:19 +0100 Subject: [PATCH 1/4] clean up javaObjectID reference from m_idToObject on finalization This fixes a small memory leak from java objects being passed from java to javascript and then being garbage collected --- test-app/runtime/src/main/cpp/ObjectManager.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test-app/runtime/src/main/cpp/ObjectManager.cpp b/test-app/runtime/src/main/cpp/ObjectManager.cpp index ccf45ef92..b47169d41 100644 --- a/test-app/runtime/src/main/cpp/ObjectManager.cpp +++ b/test-app/runtime/src/main/cpp/ObjectManager.cpp @@ -341,6 +341,8 @@ void ObjectManager::JSObjectFinalizer(Isolate *isolate, ObjectWeakCallbackState auto jsInfoIdx = static_cast(MetadataNodeKeys::JsInfo); po->Get(m_isolate)->SetInternalField(jsInfoIdx, Undefined(m_isolate)); po->Reset(); + auto it = m_idToObject.find(javaObjectID); + m_idToObject.erase(it); } } From 1caa6d9856460757d100f99e6d5c353606dd236b Mon Sep 17 00:00:00 2001 From: Francis Duvivier Date: Fri, 17 Jan 2020 14:24:08 +0100 Subject: [PATCH 2/4] delete callbackState and po on finalization This fixes a small memory leak from java objects being passed from java to javascript and then being garbage collected --- test-app/runtime/src/main/cpp/ObjectManager.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test-app/runtime/src/main/cpp/ObjectManager.cpp b/test-app/runtime/src/main/cpp/ObjectManager.cpp index b47169d41..c7751a383 100644 --- a/test-app/runtime/src/main/cpp/ObjectManager.cpp +++ b/test-app/runtime/src/main/cpp/ObjectManager.cpp @@ -343,6 +343,8 @@ void ObjectManager::JSObjectFinalizer(Isolate *isolate, ObjectWeakCallbackState po->Reset(); auto it = m_idToObject.find(javaObjectID); m_idToObject.erase(it); + delete po; + delete callbackState; } } From 66572e8b75540433f894d42cb887cb97b3be5b00 Mon Sep 17 00:00:00 2001 From: Francis Duvivier Date: Tue, 21 Jan 2020 10:24:43 +0100 Subject: [PATCH 3/4] erase javaObjectID from m_idToObject in a more direct way --- test-app/runtime/src/main/cpp/ObjectManager.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/test-app/runtime/src/main/cpp/ObjectManager.cpp b/test-app/runtime/src/main/cpp/ObjectManager.cpp index c7751a383..ccbbe62de 100644 --- a/test-app/runtime/src/main/cpp/ObjectManager.cpp +++ b/test-app/runtime/src/main/cpp/ObjectManager.cpp @@ -341,8 +341,7 @@ void ObjectManager::JSObjectFinalizer(Isolate *isolate, ObjectWeakCallbackState auto jsInfoIdx = static_cast(MetadataNodeKeys::JsInfo); po->Get(m_isolate)->SetInternalField(jsInfoIdx, Undefined(m_isolate)); po->Reset(); - auto it = m_idToObject.find(javaObjectID); - m_idToObject.erase(it); + m_idToObject.erase(javaObjectID); delete po; delete callbackState; } From ea37f3faf6ca30145a7562cffb33e5cbd7ea924e Mon Sep 17 00:00:00 2001 From: Francis Duvivier Date: Tue, 21 Jan 2020 10:26:44 +0100 Subject: [PATCH 4/4] delete po and callbackstate in case of jsInstanceInfo == nullptr --- test-app/runtime/src/main/cpp/ObjectManager.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test-app/runtime/src/main/cpp/ObjectManager.cpp b/test-app/runtime/src/main/cpp/ObjectManager.cpp index ccbbe62de..23a28b8c3 100644 --- a/test-app/runtime/src/main/cpp/ObjectManager.cpp +++ b/test-app/runtime/src/main/cpp/ObjectManager.cpp @@ -325,6 +325,8 @@ void ObjectManager::JSObjectFinalizer(Isolate *isolate, ObjectWeakCallbackState if (jsInstanceInfo == nullptr) { po->Reset(); + delete po; + delete callbackState; return; }