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

Commit d64cb225 authored by Robert Shih's avatar Robert Shih Committed by Android Git Automerger
Browse files

am 27e0350a: am b946648c: Protect data source access with mutex during disconnect

* commit '27e0350a':
  Protect data source access with mutex during disconnect
parents 1077eea6 27e0350a
Loading
Loading
Loading
Loading
+23 −8
Original line number Diff line number Diff line
@@ -467,9 +467,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();
@@ -522,13 +530,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;