aboutsummaryrefslogtreecommitdiff
path: root/src/lua/thread/luaopen_Thread.cpp
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2018-08-14 16:14:32 +0800
committerchai <chaifix@163.com>2018-08-14 16:14:32 +0800
commit57efa331c7ddc247c9b14dc19d4d98afbeb4e3b4 (patch)
tree1ebba4cd5b97a771d2f35e708ceda7193b904516 /src/lua/thread/luaopen_Thread.cpp
parent0d26ed3a45f53fdbd7731b5f2a4d88edef201e44 (diff)
*update
Diffstat (limited to 'src/lua/thread/luaopen_Thread.cpp')
-rw-r--r--src/lua/thread/luaopen_Thread.cpp10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/lua/thread/luaopen_Thread.cpp b/src/lua/thread/luaopen_Thread.cpp
index 70a30ee..b6fb33b 100644
--- a/src/lua/thread/luaopen_Thread.cpp
+++ b/src/lua/thread/luaopen_Thread.cpp
@@ -21,7 +21,7 @@ namespace lua
return nullptr;
}
- void Thread::threadRunner(jin::thread::Thread* t)
+ static int threadRunner(void* t)
{
Thread* thread = (Thread*)t;
lua_State* L = lua_open();
@@ -29,10 +29,12 @@ namespace lua
luaopen_jin(L);
luax_getglobal(L, MODULE_NAME);
Proxy* proxy = (Proxy*)luax_newinstance(L, JIN_THREAD_THREAD, sizeof(Proxy));
+ thread->retain();
proxy->bind(thread, JIN_THREAD_THREAD);
luax_setfield(L, -2, "_curThread");
luax_dostring(L, thread->code.c_str());
luax_close(L);
+ return 0;
}
static int l_thread_gc(lua_State* L)
@@ -45,7 +47,7 @@ namespace lua
static int l_start(lua_State* L)
{
Thread* t = checkThread(L);
- bool result = t->start();
+ bool result = t->start(t);
luax_pushboolean(L, result);
return 1;
}
@@ -125,6 +127,7 @@ namespace lua
case thread::Thread::Variant::POINTER:
Proxy* p = (Proxy*)v.pointer;
Proxy* proxy = (Proxy*)luax_newinstance(L, p->type, sizeof(Proxy));
+ p->object->retain();
proxy->bind(p->object, p->type);
break;
@@ -158,6 +161,7 @@ namespace lua
case thread::Thread::Variant::POINTER:
Proxy* p = (Proxy*)v.pointer;
Proxy* proxy = (Proxy*)luax_newinstance(L, p->type, sizeof(Proxy));
+ p->object->retain();
proxy->bind(p->object, p->type);
break;
@@ -216,7 +220,7 @@ namespace lua
const char* name = luax_checkstring(L, 1);
const char* code = luax_checkstring(L, 2);
Proxy* proxy = (Proxy*)luax_newinstance(L, JIN_THREAD_THREAD, sizeof(Proxy));
- Thread* thread = new Thread(name, code, Thread::threadRunner);
+ Thread* thread = new Thread(name, code, threadRunner);
proxy->bind(thread, JIN_THREAD_THREAD);
return 1;
}