diff options
author | Elias Fleckenstein <54945686+EliasFleckenstein03@users.noreply.github.com> | 2020-11-04 16:57:47 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-11-04 16:57:47 +0100 |
commit | 3e16c3a78fff61c20e63ba730d15e94e3bb877b4 (patch) | |
tree | c070350db219f2c4241d22bc31949685c7b42fe9 /src/script/cpp_api/s_async.cpp | |
parent | 5d9ae5a91c544fc7fbd475decf47cef7e09ef8fc (diff) | |
parent | 6ccb5835ff55d85156be91473c598eca9d6cb9a6 (diff) | |
download | dragonfireclient-3e16c3a78fff61c20e63ba730d15e94e3bb877b4.tar.xz |
Merge branch 'master' into master
Diffstat (limited to 'src/script/cpp_api/s_async.cpp')
-rw-r--r-- | src/script/cpp_api/s_async.cpp | 44 |
1 files changed, 24 insertions, 20 deletions
diff --git a/src/script/cpp_api/s_async.cpp b/src/script/cpp_api/s_async.cpp index d0e520ae9..5f1f9297e 100644 --- a/src/script/cpp_api/s_async.cpp +++ b/src/script/cpp_api/s_async.cpp @@ -42,6 +42,7 @@ AsyncEngine::~AsyncEngine() workerThread->stop(); } + // Wake up all threads for (std::vector<AsyncWorkerThread *>::iterator it = workerThreads.begin(); it != workerThreads.end(); ++it) { @@ -76,16 +77,16 @@ void AsyncEngine::initialize(unsigned int numEngines) initDone = true; for (unsigned int i = 0; i < numEngines; i++) { - AsyncWorkerThread *toAdd = new AsyncWorkerThread( - this, std::string("AsyncWorker-") + itos(i)); + AsyncWorkerThread *toAdd = new AsyncWorkerThread(this, + std::string("AsyncWorker-") + itos(i)); workerThreads.push_back(toAdd); toAdd->start(); } } /******************************************************************************/ -unsigned int AsyncEngine::queueAsyncJob( - const std::string &func, const std::string ¶ms) +unsigned int AsyncEngine::queueAsyncJob(const std::string &func, + const std::string ¶ms) { jobQueueMutex.lock(); LuaJobInfo toAdd; @@ -157,8 +158,7 @@ void AsyncEngine::step(lua_State *L) } /******************************************************************************/ -void AsyncEngine::pushFinishedJobs(lua_State *L) -{ +void AsyncEngine::pushFinishedJobs(lua_State* L) { // Result Table MutexAutoLock l(resultQueueMutex); @@ -170,7 +170,7 @@ void AsyncEngine::pushFinishedJobs(lua_State *L) LuaJobInfo jobDone = resultQueue.front(); resultQueue.pop_front(); - lua_createtable(L, 0, 2); // Pre-allocate space for two map fields + lua_createtable(L, 0, 2); // Pre-allocate space for two map fields int top_lvl2 = lua_gettop(L); lua_pushstring(L, "jobid"); @@ -179,7 +179,7 @@ void AsyncEngine::pushFinishedJobs(lua_State *L) lua_pushstring(L, "retval"); lua_pushlstring(L, jobDone.serializedResult.data(), - jobDone.serializedResult.size()); + jobDone.serializedResult.size()); lua_settable(L, top_lvl2); lua_rawseti(L, top, index++); @@ -187,7 +187,7 @@ void AsyncEngine::pushFinishedJobs(lua_State *L) } /******************************************************************************/ -void AsyncEngine::prepareEnvironment(lua_State *L, int top) +void AsyncEngine::prepareEnvironment(lua_State* L, int top) { for (StateInitializer &stateInitializer : stateInitializers) { stateInitializer(L, top); @@ -195,10 +195,11 @@ void AsyncEngine::prepareEnvironment(lua_State *L, int top) } /******************************************************************************/ -AsyncWorkerThread::AsyncWorkerThread( - AsyncEngine *jobDispatcher, const std::string &name) : - Thread(name), - ScriptApiBase(ScriptingType::Async), jobDispatcher(jobDispatcher) +AsyncWorkerThread::AsyncWorkerThread(AsyncEngine* jobDispatcher, + const std::string &name) : + Thread(name), + ScriptApiBase(ScriptingType::Async), + jobDispatcher(jobDispatcher) { lua_State *L = getStack(); @@ -220,7 +221,7 @@ AsyncWorkerThread::~AsyncWorkerThread() } /******************************************************************************/ -void *AsyncWorkerThread::run() +void* AsyncWorkerThread::run() { lua_State *L = getStack(); @@ -228,8 +229,8 @@ void *AsyncWorkerThread::run() try { loadScript(script); } catch (const ModError &e) { - errorstream << "Execution of async base environment failed: " << e.what() - << std::endl; + errorstream << "Execution of async base environment failed: " + << e.what() << std::endl; FATAL_ERROR("Execution of async base environment failed"); } @@ -257,9 +258,11 @@ void *AsyncWorkerThread::run() luaL_checktype(L, -1, LUA_TFUNCTION); // Call it - lua_pushlstring(L, toProcess.serializedFunction.data(), + lua_pushlstring(L, + toProcess.serializedFunction.data(), toProcess.serializedFunction.size()); - lua_pushlstring(L, toProcess.serializedParams.data(), + lua_pushlstring(L, + toProcess.serializedParams.data(), toProcess.serializedParams.size()); int result = lua_pcall(L, 2, 1, error_handler); @@ -273,13 +276,14 @@ void *AsyncWorkerThread::run() toProcess.serializedResult = std::string(retval, length); } - lua_pop(L, 1); // Pop retval + lua_pop(L, 1); // Pop retval // Put job result jobDispatcher->putJobResult(toProcess); } - lua_pop(L, 2); // Pop core and error handler + lua_pop(L, 2); // Pop core and error handler return 0; } + |