Skip to content

Commit 90dbb74

Browse files
committed
修复Android、Unity3D中提早释放Function问题
Former-commit-id: 4f4e3f3f24e2e067111ea897bee5950934801129
1 parent f7c26af commit 90dbb74

4 files changed

Lines changed: 31 additions & 8 deletions

File tree

Sample/Android/app/app.iml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -69,14 +69,6 @@
6969
<sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" />
7070
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
7171
<sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
72-
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
73-
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
74-
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
75-
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
76-
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
77-
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
78-
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
79-
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
8072
<sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
8173
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
8274
<sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
@@ -85,6 +77,14 @@
8577
<sourceFolder url="file://$MODULE_DIR$/src/test/jni" isTestSource="true" />
8678
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
8779
<sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
80+
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
81+
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
82+
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
83+
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
84+
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
85+
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
86+
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
87+
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
8888
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
8989
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
9090
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/builds" />

Source/lua-common/LuaDataExchanger.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,19 @@ void LuaDataExchanger::getLuaObject(LuaObject *object)
317317
}
318318
}
319319

320+
void LuaDataExchanger::setLuaObject(int stackIndex, const std::string &linkId)
321+
{
322+
lua_State *state = _context -> getLuaState();
323+
324+
beginGetVarsTable();
325+
326+
//放入对象到_vars_表中
327+
lua_pushvalue(state, stackIndex);
328+
lua_setfield(state, -2, linkId.c_str());
329+
330+
endGetVarsTable();
331+
}
332+
320333
void LuaDataExchanger::retainLuaObject(LuaObject *object)
321334
{
322335
if (object != NULL)

Source/lua-common/LuaDataExchanger.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,14 @@ namespace cn {
6868
*/
6969
void getLuaObject(LuaObject *object);
7070

71+
/**
72+
* 设置Lua对象
73+
*
74+
* @param stackIndex 栈索引
75+
* @param linkId 连接标识
76+
*/
77+
void setLuaObject(int stackIndex, const std::string &linkId);
78+
7179
/**
7280
* 保留对象对应在Lua中的引用
7381
*

Source/lua-common/LuaFunction.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ LuaFunction::LuaFunction(LuaContext *context, int index)
3232
_context = context;
3333
_linkId = StringUtils::format("%p", this);
3434

35+
_context -> getDataExchanger() -> setLuaObject(index, _linkId);
36+
3537
LuaValue *value = LuaValue::FunctionValue(this);
3638
_context->retainValue(value);
3739
value -> release();

0 commit comments

Comments
 (0)