Fix fingerprint aidl race condition then thread is join

Even if the shared variable is atomic, it must be modified under the
mutex in order to correctly publish the modification to the waiting
thread.

There is a chance that mThread will miss both mIsDestructing
and notify event without a mutex.

Bug: 231737939
Test: manual
Change-Id: If83a94b766c816b9e4897acb1e89eacdce880c15
This commit is contained in:
Keith Mok
2022-05-06 19:44:39 +00:00
parent 78672d1c2e
commit 85aebe3ee2

View File

@@ -31,7 +31,10 @@ WorkerThread::WorkerThread(size_t maxQueueSize)
WorkerThread::~WorkerThread() {
// This is a signal for threadFunc to terminate as soon as possible, and a hint for schedule
// that it doesn't need to do any work.
mIsDestructing = true;
{
std::unique_lock<std::mutex> lock(mQueueMutex);
mIsDestructing = true;
}
mQueueCond.notify_all();
mThread.join();
}