diff options
author | chai <chaifix@163.com> | 2018-08-14 16:14:32 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2018-08-14 16:14:32 +0800 |
commit | 57efa331c7ddc247c9b14dc19d4d98afbeb4e3b4 (patch) | |
tree | 1ebba4cd5b97a771d2f35e708ceda7193b904516 /src/lua/thread/luaopen_Thread.cpp | |
parent | 0d26ed3a45f53fdbd7731b5f2a4d88edef201e44 (diff) |
*update
Diffstat (limited to 'src/lua/thread/luaopen_Thread.cpp')
-rw-r--r-- | src/lua/thread/luaopen_Thread.cpp | 10 |
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; } |