mNumRetries(0),
mDurationUs(-1),
mSeekDone(false),
+ mDisconnectPending(false),
mMonitorQueueGeneration(0) {
}
}
void LiveSession::disconnect() {
+ Mutex::Autolock autoLock(mLock);
+ mDisconnectPending = true;
+
+ mHTTPDataSource->disconnect();
+
(new AMessage(kWhatDisconnect, id()))->post();
}
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) {
LOGI("onDisconnect");
mDataSource->queueEOS(ERROR_END_OF_STREAM);
+
+ Mutex::Autolock autoLock(mLock);
+ mDisconnectPending = false;
}
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) {