mirror of
https://github.com/Evolution-X/hardware_interfaces
synced 2026-02-01 16:50:18 +00:00
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
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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(); }
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user