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

Commit b669b18d authored by Robert Shih's avatar Robert Shih Committed by Android (Google) Code Review
Browse files

Merge "Protect data source access with mutex during disconnect"

parents 0386c91b ebc2712d
Loading
Loading
Loading
Loading
+23 −8
Original line number Diff line number Diff line
@@ -473,9 +473,17 @@ void NuPlayer::GenericSource::finishPrepareAsync() {

void NuPlayer::GenericSource::notifyPreparedAndCleanup(status_t err) {
    if (err != OK) {
        {
            sp<DataSource> dataSource = mDataSource;
            sp<NuCachedSource2> cachedSource = mCachedSource;
            sp<DataSource> httpSource = mHttpSource;
            {
                Mutex::Autolock _l(mDisconnectLock);
                mDataSource.clear();
                mCachedSource.clear();
                mHttpSource.clear();
            }
        }
        mBitrate = -1;

        cancelPollBuffering();
@@ -528,13 +536,20 @@ void NuPlayer::GenericSource::resume() {
}

void NuPlayer::GenericSource::disconnect() {
    if (mDataSource != NULL) {
    sp<DataSource> dataSource, httpSource;
    {
        Mutex::Autolock _l(mDisconnectLock);
        dataSource = mDataSource;
        httpSource = mHttpSource;
    }

    if (dataSource != NULL) {
        // disconnect data source
        if (mDataSource->flags() & DataSource::kIsCachingDataSource) {
            static_cast<NuCachedSource2 *>(mDataSource.get())->disconnect();
        if (dataSource->flags() & DataSource::kIsCachingDataSource) {
            static_cast<NuCachedSource2 *>(dataSource.get())->disconnect();
        }
    } else if (mHttpSource != NULL) {
        static_cast<HTTPBase *>(mHttpSource.get())->disconnect();
    } else if (httpSource != NULL) {
        static_cast<HTTPBase *>(httpSource.get())->disconnect();
    }
}

+1 −0
Original line number Diff line number Diff line
@@ -153,6 +153,7 @@ private:
    int32_t mPrevBufferPercentage;

    mutable Mutex mReadBufferLock;
    mutable Mutex mDisconnectLock;

    sp<ALooper> mLooper;