Loading libs/gui/BLASTBufferQueue.cpp +15 −3 Original line number Original line Diff line number Diff line Loading @@ -731,14 +731,26 @@ private: std::unique_lock<std::mutex> lock(mMutex); std::unique_lock<std::mutex> lock(mMutex); while (!mDone) { while (!mDone) { while (!mRunnables.empty()) { while (!mRunnables.empty()) { std::function<void()> runnable = mRunnables.front(); std::deque<std::function<void()>> runnables = std::move(mRunnables); mRunnables.pop_front(); mRunnables.clear(); runnable(); lock.unlock(); // Run outside the lock since the runnable might trigger another // post to the async worker. execute(runnables); lock.lock(); } } mCv.wait(lock); mCv.wait(lock); } } } } void execute(std::deque<std::function<void()>>& runnables) { while (!runnables.empty()) { std::function<void()> runnable = runnables.front(); runnables.pop_front(); runnable(); } } public: public: AsyncWorker() : Singleton<AsyncWorker>() { mThread = std::thread(&AsyncWorker::run, this); } AsyncWorker() : Singleton<AsyncWorker>() { mThread = std::thread(&AsyncWorker::run, this); } Loading Loading
libs/gui/BLASTBufferQueue.cpp +15 −3 Original line number Original line Diff line number Diff line Loading @@ -731,14 +731,26 @@ private: std::unique_lock<std::mutex> lock(mMutex); std::unique_lock<std::mutex> lock(mMutex); while (!mDone) { while (!mDone) { while (!mRunnables.empty()) { while (!mRunnables.empty()) { std::function<void()> runnable = mRunnables.front(); std::deque<std::function<void()>> runnables = std::move(mRunnables); mRunnables.pop_front(); mRunnables.clear(); runnable(); lock.unlock(); // Run outside the lock since the runnable might trigger another // post to the async worker. execute(runnables); lock.lock(); } } mCv.wait(lock); mCv.wait(lock); } } } } void execute(std::deque<std::function<void()>>& runnables) { while (!runnables.empty()) { std::function<void()> runnable = runnables.front(); runnables.pop_front(); runnable(); } } public: public: AsyncWorker() : Singleton<AsyncWorker>() { mThread = std::thread(&AsyncWorker::run, this); } AsyncWorker() : Singleton<AsyncWorker>() { mThread = std::thread(&AsyncWorker::run, this); } Loading