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

Commit 4d462fbd authored by Marco Nelissen's avatar Marco Nelissen
Browse files

Fix race condition in AwesomePlayer

This fixes a race condition that could cause two threads to attempt to
connect to a server at the same time, resulting in multiple requests
and/or aborted connections. In some cases, it could cause other operations
on MediaPlayer to block until network access was complete.

b/13187722

Change-Id: Ibf78acff15dbfbf6c443a4c60623e8eac967d955
parent 19a9fef6
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -2217,6 +2217,10 @@ status_t AwesomePlayer::finishSetDataSource_l() {

        mLock.unlock();
        status_t err = mConnectingDataSource->connect(mUri, &mUriHeaders);
        // force connection at this point, to avoid a race condition between getMIMEType and the
        // caching datasource constructed below, which could result in multiple requests to the
        // server, and/or failed connections.
        String8 contentType = mConnectingDataSource->getMIMEType();
        mLock.lock();

        if (err != OK) {
@@ -2247,8 +2251,6 @@ status_t AwesomePlayer::finishSetDataSource_l() {

        mConnectingDataSource.clear();

        String8 contentType = dataSource->getMIMEType();

        if (strncasecmp(contentType.string(), "audio/", 6)) {
            // We're not doing this for streams that appear to be audio-only
            // streams to ensure that even low bandwidth streams start