diff options
author | chai <chaifix@163.com> | 2018-08-14 09:26:22 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2018-08-14 09:26:22 +0800 |
commit | 5162f84be0a4deb447c6ba1226722b049335d525 (patch) | |
tree | 5f7ed0ddc05b1499eaf0607b88fd5cb5e2a961c1 /src/lua/thread/luaopen_Thread.cpp | |
parent | 636e766791dc8680d237fafe4ff6dd904e16a860 (diff) |
*update
Diffstat (limited to 'src/lua/thread/luaopen_Thread.cpp')
-rw-r--r-- | src/lua/thread/luaopen_Thread.cpp | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/lua/thread/luaopen_Thread.cpp b/src/lua/thread/luaopen_Thread.cpp index 393a29d..4eabc07 100644 --- a/src/lua/thread/luaopen_Thread.cpp +++ b/src/lua/thread/luaopen_Thread.cpp @@ -11,6 +11,7 @@ namespace jin int luaopen_thread(lua_State* L); class Thread : public jin::thread::Thread + , public Object { public: Thread(std::string _name, std::string _code, jin::thread::Thread::ThreadRunner runner) @@ -22,6 +23,9 @@ namespace jin static void threadRunner(jin::thread::Thread* t); private: + ~Thread() + {} + const std::string name; const std::string code; }; @@ -42,16 +46,17 @@ namespace jin 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); } - static int l_gc(lua_State* L) + static int l_thread_gc(lua_State* L) { - Thread* t = checkThread(L); - delete t; + Proxy* proxy = (Proxy*)luax_checktype(L, 1, JIN_THREAD_THREAD); + proxy->release(); return 0; } @@ -138,6 +143,7 @@ namespace jin 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; @@ -171,6 +177,7 @@ namespace jin 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; @@ -203,7 +210,7 @@ namespace jin } static const luaL_Reg thread_function[] = { - { "__gc", l_gc }, + { "__gc", l_thread_gc }, { "start", l_start }, { "wait", l_wait }, { "send", l_send }, @@ -230,6 +237,7 @@ namespace jin 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->retain(); proxy->bind(thread, JIN_THREAD_THREAD); return 1; } |