aboutsummaryrefslogtreecommitdiff
path: root/src/lua/common/je_lua_shared.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lua/common/je_lua_shared.cpp')
-rw-r--r--src/lua/common/je_lua_shared.cpp18
1 files changed, 14 insertions, 4 deletions
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<int, SharedBase*>(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<int, SharedBase*>::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<int, SharedBase*>::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