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

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

Merge "Handle the case where an asynchronous prepare was initiated and then" into jb-mr2-dev

parents 8d2d4932 b5f28d47
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -1257,6 +1257,13 @@ void NuPlayer::onSourceNotify(const sp<AMessage> &msg) {
    switch (what) {
        case Source::kWhatPrepared:
        {
            if (mSource == NULL) {
                // This is a stale notification from a source that was
                // asynchronously preparing when the client called reset().
                // We handled the reset, the source is gone.
                break;
            }

            int32_t err;
            CHECK(msg->findInt32("err", &err));

+16 −0
Original line number Diff line number Diff line
@@ -333,6 +333,14 @@ status_t NuPlayerDriver::reset() {
        case STATE_RESET_IN_PROGRESS:
            return INVALID_OPERATION;

        case STATE_PREPARING:
        {
            CHECK(mIsAsyncPrepare);

            notifyListener(MEDIA_PREPARED);
            break;
        }

        default:
            break;
    }
@@ -503,6 +511,14 @@ void NuPlayerDriver::notifySetDataSourceCompleted(status_t err) {
void NuPlayerDriver::notifyPrepareCompleted(status_t err) {
    Mutex::Autolock autoLock(mLock);

    if (mState != STATE_PREPARING) {
        // We were preparing asynchronously when the client called
        // reset(), we sent a premature "prepared" notification and
        // then initiated the reset. This notification is stale.
        CHECK(mState == STATE_RESET_IN_PROGRESS || mState == STATE_IDLE);
        return;
    }

    CHECK_EQ(mState, STATE_PREPARING);

    mAsyncResult = err;