audio: Use 'join' instead of 'stop' for stream workers

Calling 'stop' can cause the worker thread to terminate
before it handles the 'halReservedExit' command. This should
be avoided because a proper exit sequence may do cleanups.
Since all stream workers must handle the 'halReservedExit'
command, use of 'stop' should not be needed (if the thread
code gets stuck on a call to drivers, calling 'stop' will
not interrupt this), thus it is being replaced by 'join'.

Bug: 344482249
Test: atest CtsMediaAudioTestCases
Test: atest VtsHalAudioCoreTargetTest
Change-Id: If13f7239423657b80091239ff67e7fe350957e2e
Merged-In: If13f7239423657b80091239ff67e7fe350957e2e
This commit is contained in:
Mikhail Naganov
2024-07-24 06:23:25 -07:00
parent 080d6b39ed
commit 657284d4ef
2 changed files with 3 additions and 3 deletions

View File

@@ -772,7 +772,7 @@ ndk::ScopedAStatus StreamCommonImpl::close() {
if (!isClosed()) {
stopWorker();
LOG(DEBUG) << __func__ << ": joining the worker thread...";
mWorker->stop();
mWorker->join();
LOG(DEBUG) << __func__ << ": worker thread joined";
onClose(mWorker->setClosed());
return ndk::ScopedAStatus::ok();

View File

@@ -245,7 +245,7 @@ struct StreamWorkerInterface {
virtual StreamDescriptor::State setClosed() = 0;
virtual bool start() = 0;
virtual pid_t getTid() = 0;
virtual void stop() = 0;
virtual void join() = 0;
virtual std::string getError() = 0;
};
@@ -265,7 +265,7 @@ class StreamWorkerImpl : public StreamWorkerInterface,
return WorkerImpl::start(WorkerImpl::kThreadName, ANDROID_PRIORITY_URGENT_AUDIO);
}
pid_t getTid() override { return WorkerImpl::getTid(); }
void stop() override { return WorkerImpl::stop(); }
void join() override { return WorkerImpl::join(); }
std::string getError() override { return WorkerImpl::getError(); }
};