Fix over-poping and only push the core once
authorShadowNinja <shadowninja@minetest.net>
Fri, 30 May 2014 23:38:11 +0000 (19:38 -0400)
committerShadowNinja <shadowninja@minetest.net>
Fri, 30 May 2014 23:38:11 +0000 (19:38 -0400)
src/script/cpp_api/s_async.cpp

index 0b19572c272370805b62d358798c78a66ff7b25a..ef84d5037531636c7ddde953a1face36709cb161 100644 (file)
@@ -262,6 +262,12 @@ void* AsyncWorkerThread::Thread()
                abort();
        }
 
+       lua_getglobal(L, "core");
+       if (lua_isnil(L, -1)) {
+               errorstream << "Unable to find core within async environment!";
+               abort();
+       }
+
        // Main loop
        while (!StopRequested()) {
                // Wait for job
@@ -271,12 +277,6 @@ void* AsyncWorkerThread::Thread()
                        continue;
                }
 
-               lua_getglobal(L, "core");
-               if (lua_isnil(L, -1)) {
-                       errorstream << "Unable to find core within async environment!";
-                       abort();
-               }
-
                lua_getfield(L, -1, "job_processor");
                if (lua_isnil(L, -1)) {
                        errorstream << "Unable to get async job processor!" << std::endl;
@@ -303,13 +303,16 @@ void* AsyncWorkerThread::Thread()
                        toProcess.serializedResult = std::string(retval, length);
                }
 
-               // Pop core, job_processor, and retval
-               lua_pop(L, 3);
+               lua_pop(L, 1);  // Pop retval
 
                // Put job result
                jobDispatcher->putJobResult(toProcess);
        }
+
+       lua_pop(L, 1);  // Pop core
+
        log_deregister_thread();
+
        return 0;
 }