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

Commit b6f76424 authored by Henrik Backlund's avatar Henrik Backlund Committed by Henrik Baard
Browse files

Fix crash in MyHandler when sockets are not set.

-When going quickly in and out of the video view during an rtsp
streaming session, a race condition occurs and MyHandler tries to
connect to a socket that has been reset. To avoid this,
checks are added.
- If there are errors during setupTrack 1, it is no use
setting up track 2. It will cause new errors.
- No assert for socket connect since there is a normal
status check already.

Change-Id: Ie06221d6c0d78ce0449f76c782ed5120fa646bfd
parent f00d40c7
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -481,7 +481,6 @@ void ARTSPConnection::onReceiveResponse() {
    FD_SET(mSocket, &rs);

    int res = select(mSocket + 1, &rs, NULL, NULL, &tv);
    CHECK_GE(res, 0);

    if (res == 1) {
        MakeSocketBlocking(mSocket, true);
+22 −16
Original line number Diff line number Diff line
@@ -558,6 +558,7 @@ struct MyHandler : public AHandler {
                        i = response->mHeaders.indexOfKey("transport");
                        CHECK_GE(i, 0);

                        if (track->mRTPSocket != -1 && track->mRTCPSocket != -1) {
                            if (!track->mUsingInterleavedTCP) {
                                AString transport = response->mHeaders.valueAt(i);

@@ -575,6 +576,9 @@ struct MyHandler : public AHandler {
                                    notify, track->mUsingInterleavedTCP);

                            mSetupTracksSuccessful = true;
                        } else {
                            result = BAD_VALUE;
                        }
                    }
                }

@@ -596,7 +600,7 @@ struct MyHandler : public AHandler {
                }

                ++index;
                if (index < mSessionDesc->countTracks()) {
                if (result == OK && index < mSessionDesc->countTracks()) {
                    setupTrack(index);
                } else if (mSetupTracksSuccessful) {
                    ++mKeepAliveGeneration;
@@ -1268,6 +1272,8 @@ private:
        info->mUsingInterleavedTCP = false;
        info->mFirstSeqNumInSegment = 0;
        info->mNewSegment = true;
        info->mRTPSocket = -1;
        info->mRTCPSocket = -1;
        info->mRTPAnchor = 0;
        info->mNTPAnchorUs = -1;
        info->mNormalPlayTimeRTP = 0;