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

Commit 537fa17f authored by Andreas Huber's avatar Andreas Huber Committed by Android (Google) Code Review
Browse files

Merge "Disconnect HTTP live sessions as soon as the request comes in." into honeycomb

parents 0ad4f096 17ab86cd
Loading
Loading
Loading
Loading
+24 −1
Original line number Diff line number Diff line
@@ -51,6 +51,7 @@ LiveSession::LiveSession()
      mNumRetries(0),
      mDurationUs(-1),
      mSeekDone(false),
      mDisconnectPending(false),
      mMonitorQueueGeneration(0) {
}

@@ -68,6 +69,11 @@ void LiveSession::connect(const char *url) {
}

void LiveSession::disconnect() {
    Mutex::Autolock autoLock(mLock);
    mDisconnectPending = true;

    mHTTPDataSource->disconnect();

    (new AMessage(kWhatDisconnect, id()))->post();
}

@@ -138,7 +144,13 @@ void LiveSession::onConnect(const sp<AMessage> &msg) {
    mMasterURL = url;

    sp<M3UParser> playlist = fetchPlaylist(url.c_str());
    CHECK(playlist != NULL);

    if (playlist == NULL) {
        LOGE("unable to fetch master playlist '%s'.", url.c_str());

        mDataSource->queueEOS(ERROR_IO);
        return;
    }

    if (playlist->isVariantPlaylist()) {
        for (size_t i = 0; i < playlist->size(); ++i) {
@@ -177,6 +189,9 @@ void LiveSession::onDisconnect() {
    LOGI("onDisconnect");

    mDataSource->queueEOS(ERROR_END_OF_STREAM);

    Mutex::Autolock autoLock(mLock);
    mDisconnectPending = false;
}

status_t LiveSession::fetchFile(const char *url, sp<ABuffer> *out) {
@@ -189,6 +204,14 @@ status_t LiveSession::fetchFile(const char *url, sp<ABuffer> *out) {
    } else if (strncasecmp(url, "http://", 7)) {
        return ERROR_UNSUPPORTED;
    } else {
        {
            Mutex::Autolock autoLock(mLock);

            if (mDisconnectPending) {
                return ERROR_IO;
            }
        }

        status_t err = mHTTPDataSource->connect(url);

        if (err != OK) {
+1 −0
Original line number Diff line number Diff line
@@ -87,6 +87,7 @@ private:
    Condition mCondition;
    int64_t mDurationUs;
    bool mSeekDone;
    bool mDisconnectPending;

    int32_t mMonitorQueueGeneration;