diff --git a/broadcastradio/common/tests/Android.bp b/broadcastradio/common/tests/Android.bp index 0a6a3a27d0..1ea4e8584b 100644 --- a/broadcastradio/common/tests/Android.bp +++ b/broadcastradio/common/tests/Android.bp @@ -86,4 +86,7 @@ cc_test { ], static_libs: ["android.hardware.broadcastradio@common-utils-lib"], test_suites: ["general-tests"], + shared_libs: [ + "libbase", + ], } diff --git a/broadcastradio/common/utils/WorkerThread.cpp b/broadcastradio/common/utils/WorkerThread.cpp index 43fd04a89a..5c8e59c03f 100644 --- a/broadcastradio/common/utils/WorkerThread.cpp +++ b/broadcastradio/common/utils/WorkerThread.cpp @@ -69,8 +69,11 @@ void WorkerThread::cancelAll() { } void WorkerThread::threadLoop() { - while (!mIsTerminating) { + while (true) { unique_lock lk(mMut); + if (mIsTerminating) { + return; + } if (mTasks.empty()) { mCond.wait(lk); continue; diff --git a/broadcastradio/common/utils/include/broadcastradio-utils/WorkerThread.h b/broadcastradio/common/utils/include/broadcastradio-utils/WorkerThread.h index 457b57e403..e381f5a132 100644 --- a/broadcastradio/common/utils/include/broadcastradio-utils/WorkerThread.h +++ b/broadcastradio/common/utils/include/broadcastradio-utils/WorkerThread.h @@ -20,6 +20,8 @@ #include #include +#include + namespace android { class WorkerThread { @@ -40,11 +42,11 @@ class WorkerThread { }; friend bool operator<(const Task& lhs, const Task& rhs); - std::atomic mIsTerminating; std::mutex mMut; - std::condition_variable mCond; + bool mIsTerminating GUARDED_BY(mMut); + std::condition_variable mCond GUARDED_BY(mMut); std::thread mThread; - std::priority_queue mTasks; + std::priority_queue mTasks GUARDED_BY(mMut); void threadLoop(); };