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

Commit 80d03d29 authored by Andy Hung's avatar Andy Hung
Browse files

AudioFinger: Release buffers in AudioMixer when track becomes inactive

Test: Regression check, some instrumented test
Bug: 77813646
Change-Id: Ia0ab75d4af1ae2c865256a02e956cf40f56628f5
parent 7121c67c
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -4793,6 +4793,18 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::MixerThread::prepareTrac
        track->reset();
    }

    // Track destruction may occur outside of threadLoop once it is removed from active tracks.
    // Ensure the AudioMixer doesn't have a raw "buffer provider" pointer to the track if
    // it ceases to be active, to allow safe removal from the AudioMixer at the start
    // of prepareTracks_l(); this releases any outstanding buffer back to the track.
    // See also the implementation of destroyTrack_l().
    for (const auto &track : *tracksToRemove) {
        const int name = track->name();
        if (mAudioMixer->exists(name)) { // Normal tracks here, fast tracks in FastMixer.
            mAudioMixer->setBufferProvider(name, nullptr /* bufferProvider */);
        }
    }

    // remove all the tracks that need to be...
    removeTracks_l(*tracksToRemove);