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

Commit b450d96b authored by Andreas Huber's avatar Andreas Huber Committed by Android Git Automerger
Browse files

am 537fa17f: Merge "Disconnect HTTP live sessions as soon as the request comes in." into honeycomb

* commit '537fa17f':
  Disconnect HTTP live sessions as soon as the request comes in.
parents d4155ae6 537fa17f
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;