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

* commit '537fa17f21390fcb4a8d4b24f1cc80ca147ccce0':
  Disconnect HTTP live sessions as soon as the request comes in.
This commit is contained in:
Andreas Huber
2011-01-31 18:31:05 -08:00
committed by Android Git Automerger
2 changed files with 25 additions and 1 deletions

View File

@@ -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) {

View File

@@ -87,6 +87,7 @@ private:
Condition mCondition;
int64_t mDurationUs;
bool mSeekDone;
bool mDisconnectPending;
int32_t mMonitorQueueGeneration;