diff --git a/src/modules/thread/sdl/Thread.cpp b/src/modules/thread/sdl/Thread.cpp index 99cc030fa..e5d892ddb 100644 --- a/src/modules/thread/sdl/Thread.cpp +++ b/src/modules/thread/sdl/Thread.cpp @@ -44,7 +44,9 @@ namespace sdl luaopen_love_thread(L); lua_pushstring(L, comm->getName()); luax_convobj(L, lua_gettop(L), "thread", "getThread"); - lua_setglobal(L, "thread"); + lua_getglobal(L, "love"); + lua_pushvalue(L, -2); + lua_setfield(L, -2, "_curthread"); if(luaL_dostring(L, comm->getCode()) == 1) { ThreadVariant *v = new ThreadVariant(lua_tostring(L, -1)); diff --git a/src/modules/thread/sdl/wrap_Thread.cpp b/src/modules/thread/sdl/wrap_Thread.cpp index d6798fff9..29e2c4bbf 100644 --- a/src/modules/thread/sdl/wrap_Thread.cpp +++ b/src/modules/thread/sdl/wrap_Thread.cpp @@ -276,6 +276,12 @@ namespace sdl int w_getThread(lua_State *L) { + if (lua_isnoneornil(L, 1)) + { + lua_getglobal(L, "love"); + lua_getfield(L, -1, "_curthread"); + return 1; + } std::string name = luaL_checkstring(L, 1); Thread *t = instance->getThread(name); if (t) @@ -311,6 +317,13 @@ namespace sdl try { instance = new ThreadModule(); + lua_getglobal(L, "love"); + Thread *curthread = instance->getThread("main"); + curthread->lock(); + curthread->retain(); + curthread->unlock(); + luax_newtype(L, "Thread", THREAD_THREAD_T, (void*)curthread); + lua_setfield(L, -2, "_curthread"); } catch(Exception & e) {