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

Commit ae510085 authored by Andreas Huber's avatar Andreas Huber Committed by Android (Google) Code Review
Browse files

Merge "Guard the audio notifications with a separate lock to avoid deadlocks during reset."

parents 8a16f922 67a041fa
Loading
Loading
Loading
Loading
+15 −16
Original line number Diff line number Diff line
@@ -978,7 +978,7 @@ status_t AwesomePlayer::startAudioPlayer_l(bool sendErrorNotification) {
            CHECK(!mAudioPlayer->isSeeking());

            // We will have finished the seek while starting the audio player.
            postAudioSeekComplete_l();
            postAudioSeekComplete();
        }
    } else {
        mAudioPlayer->resume();
@@ -1877,7 +1877,8 @@ void AwesomePlayer::postVideoLagEvent_l() {
    mQueue.postEventWithDelay(mVideoLagEvent, 1000000ll);
}

void AwesomePlayer::postCheckAudioStatusEvent_l(int64_t delayUs) {
void AwesomePlayer::postCheckAudioStatusEvent(int64_t delayUs) {
    Mutex::Autolock autoLock(mAudioLock);
    if (mAudioStatusEventPending) {
        return;
    }
@@ -1886,7 +1887,8 @@ void AwesomePlayer::postCheckAudioStatusEvent_l(int64_t delayUs) {
}

void AwesomePlayer::onCheckAudioStatus() {
    Mutex::Autolock autoLock(mLock);
    {
        Mutex::Autolock autoLock(mAudioLock);
        if (!mAudioStatusEventPending) {
            // Event was dispatched and while we were blocking on the mutex,
            // has already been cancelled.
@@ -1894,6 +1896,9 @@ void AwesomePlayer::onCheckAudioStatus() {
        }

        mAudioStatusEventPending = false;
    }

    Mutex::Autolock autoLock(mLock);

    if (mWatchForAudioSeekComplete && !mAudioPlayer->isSeeking()) {
        mWatchForAudioSeekComplete = false;
@@ -2239,17 +2244,11 @@ uint32_t AwesomePlayer::flags() const {
}

void AwesomePlayer::postAudioEOS(int64_t delayUs) {
    Mutex::Autolock autoLock(mLock);
    postCheckAudioStatusEvent_l(delayUs);
    postCheckAudioStatusEvent(delayUs);
}

void AwesomePlayer::postAudioSeekComplete() {
    Mutex::Autolock autoLock(mLock);
    postAudioSeekComplete_l();
}

void AwesomePlayer::postAudioSeekComplete_l() {
    postCheckAudioStatusEvent_l(0 /* delayUs */);
    postCheckAudioStatusEvent(0);
}

status_t AwesomePlayer::setParameter(int key, const Parcel &request) {
+2 −2
Original line number Diff line number Diff line
@@ -148,6 +148,7 @@ private:
    mutable Mutex mLock;
    Mutex mMiscStateLock;
    mutable Mutex mStatsLock;
    Mutex mAudioLock;

    OMXClient mClient;
    TimedEventQueue mQueue;
@@ -223,7 +224,7 @@ private:
    void postVideoEvent_l(int64_t delayUs = -1);
    void postBufferingEvent_l();
    void postStreamDoneEvent_l(status_t status);
    void postCheckAudioStatusEvent_l(int64_t delayUs);
    void postCheckAudioStatusEvent(int64_t delayUs);
    void postVideoLagEvent_l();
    status_t play_l();

@@ -295,7 +296,6 @@ private:
    void ensureCacheIsFetching_l();

    status_t startAudioPlayer_l(bool sendErrorNotification = true);
    void postAudioSeekComplete_l();

    void shutdownVideoDecoder_l();
    status_t setNativeWindow_l(const sp<ANativeWindow> &native);