@@ -16,6 +16,7 @@ using namespace v8;
1616using namespace std ;
1717using namespace tns ;
1818
19+
1920ObjectManager::ObjectManager ()
2021:
2122 m_env(JEnv()), m_numberOfGC(0 ), m_currentObjectId(0 ), m_cache(NewWeakGlobalRefCallback, DeleteWeakGlobalRefCallback, 1000 , this )
@@ -452,6 +453,8 @@ void ObjectManager::MarkReachableObjects(Isolate *isolate, const Local<Object>&
452453 assert (!m_markedForGC.empty ());
453454 auto & topGCInfo = m_markedForGC.top ();
454455 int numberOfGC = topGCInfo.numberOfGC ;
456+ auto fromJsInfo = GetJSInstanceInfo (obj);
457+ auto fromId = fromJsInfo->JavaObjectID ;
455458
456459 auto curGCNumValue = Integer::New (isolate, numberOfGC);
457460
@@ -467,6 +470,18 @@ void ObjectManager::MarkReachableObjects(Isolate *isolate, const Local<Object>&
467470
468471 auto o = top.As <Object>();
469472
473+ auto jsInfo = GetJSInstanceInfo (o);
474+ if ((jsInfo != nullptr ) && (jsInfo->JavaObjectID != fromId))
475+ {
476+ auto hasImplObject = HasImplObject (isolate, o);
477+ if (hasImplObject)
478+ {
479+ jsInfo->IsJavaObjectWeak = false ;
480+ m_implObjStrong[jsInfo->JavaObjectID ] = nullptr ;
481+ }
482+ o->SetHiddenValue (propName, curGCNumValue);
483+ }
484+
470485 uint8_t *addr = NativeScriptExtension::GetAddress (o);
471486 auto itFound = m_visited.find (addr);
472487 if (itFound != m_visited.end ())
@@ -492,18 +507,6 @@ void ObjectManager::MarkReachableObjects(Isolate *isolate, const Local<Object>&
492507 NativeScriptExtension::ReleaseClosureObjects (closureObjects);
493508 }
494509
495- auto jsInfo = GetJSInstanceInfo (o);
496- if (jsInfo != nullptr )
497- {
498- auto hasImplObject = HasImplObject (isolate, o);
499- if (hasImplObject)
500- {
501- jsInfo->IsJavaObjectWeak = false ;
502- m_implObjStrong[jsInfo->JavaObjectID ] = nullptr ;
503- }
504- o->SetHiddenValue (propName, curGCNumValue);
505- }
506-
507510 auto proto = o->GetPrototype ();
508511 if (!proto.IsEmpty () && !proto->IsNull () && !proto->IsUndefined () && proto->IsObject ())
509512 {
0 commit comments