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

Commit 03682cda authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "libmediaplayerservice:Fix deadlock on gapless start failure"

parents 2987b83c 6cb33759
Loading
Loading
Loading
Loading
+21 −4
Original line number Original line Diff line number Diff line
@@ -1318,16 +1318,33 @@ void MediaPlayerService::Client::notify(
    }
    }


    sp<IMediaPlayerClient> c;
    sp<IMediaPlayerClient> c;
    sp<Client> nextClient;
    status_t errStartNext = NO_ERROR;
    {
    {
        Mutex::Autolock l(client->mLock);
        Mutex::Autolock l(client->mLock);
        c = client->mClient;
        c = client->mClient;
        if (msg == MEDIA_PLAYBACK_COMPLETE && client->mNextClient != NULL) {
        if (msg == MEDIA_PLAYBACK_COMPLETE && client->mNextClient != NULL) {
            nextClient = client->mNextClient;

            if (client->mAudioOutput != NULL)
            if (client->mAudioOutput != NULL)
                client->mAudioOutput->switchToNextOutput();
                client->mAudioOutput->switchToNextOutput();
            client->mNextClient->start();

            if (client->mNextClient->mClient != NULL) {
            errStartNext = nextClient->start();
                client->mNextClient->mClient->notify(
        }
                        MEDIA_INFO, MEDIA_INFO_STARTED_AS_NEXT, 0, obj);
    }

    if (nextClient != NULL) {
        sp<IMediaPlayerClient> nc;
        {
            Mutex::Autolock l(nextClient->mLock);
            nc = nextClient->mClient;
        }
        if (nc != NULL) {
            if (errStartNext == NO_ERROR) {
                nc->notify(MEDIA_INFO, MEDIA_INFO_STARTED_AS_NEXT, 0, obj);
            } else {
                nc->notify(MEDIA_ERROR, MEDIA_ERROR_UNKNOWN , 0, obj);
                ALOGE("gapless:start playback for next track failed, err(%d)", errStartNext);
            }
            }
        }
        }
    }
    }