From 37f9824273fc3233f84bcff4ecfe1132dad74185 Mon Sep 17 00:00:00 2001 From: chai Date: Fri, 23 Nov 2018 21:27:56 +0800 Subject: =?UTF-8?q?*=E6=9B=B4=E6=96=B0=E7=BB=91=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lua/common/je_lua_shared.cpp | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) (limited to 'src/lua/common/je_lua_shared.cpp') diff --git a/src/lua/common/je_lua_shared.cpp b/src/lua/common/je_lua_shared.cpp index 241aec2..55832fd 100644 --- a/src/lua/common/je_lua_shared.cpp +++ b/src/lua/common/je_lua_shared.cpp @@ -15,6 +15,8 @@ namespace JinEngine { if (--mCount <= 0) { + // Remove all objects referenced by object. + luax_removereference(mL, this); // Remove game object reference. luax_removeobject(mL, this); delete this; @@ -26,6 +28,8 @@ namespace JinEngine removeDependency(key); shared->retain(); mDependencies.insert(std::pair(key, shared)); + // Set lua reference. + luax_addreference(mL, this, shared); } void SharedBase::removeDependency(int key) @@ -33,17 +37,23 @@ namespace JinEngine if (!isDependOn(key)) return; std::map::iterator it = mDependencies.find(key); - it->second->release(); + SharedBase* dep = it->second; + // Remove lua reference. + luax_removereference(mL, this, dep); + dep->release(); mDependencies.erase(it); } - void SharedBase::removeDependency(SharedBase* dep) + void SharedBase::removeDependency(SharedBase* dependency) { for (std::map::iterator it = mDependencies.begin(); it != mDependencies.end();) { - if (it->second == dep) + SharedBase* dep = it->second; + if (dep == dependency) { - it->second->release(); + dep->release(); + // Remove lua reference. + luax_removereference(mL, this, dep); mDependencies.erase(it); } else -- cgit v1.1-26-g67d0