Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 657284d4 authored by Mikhail Naganov's avatar Mikhail Naganov
Browse files

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
parent 080d6b39
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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();
+2 −2
Original line number Diff line number Diff line
@@ -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(); }
};