Make sure seek triggers a reconnect if needed.

Previously, if we had disconnected at the high watermark,
the read immediately following a seek would fail, and would
not be retried, resulting in an error.

Change-Id: I45a53563fe17d6b54893815abc7750a7dfb0a124
This commit is contained in:
Bryan Mawhinney
2012-01-18 13:40:07 +00:00
parent 96c804af0b
commit c14cc17972

View File

@@ -370,6 +370,7 @@ void NuCachedSource2::onFetch() {
&& (mSource->flags() & DataSource::kIsHTTPBasedSource)) {
ALOGV("Disconnecting at high watermark");
static_cast<HTTPBase *>(mSource.get())->disconnect();
mFinalStatus = -EAGAIN;
}
}
} else {
@@ -549,7 +550,7 @@ ssize_t NuCachedSource2::readInternal(off64_t offset, void *data, size_t size) {
size_t delta = offset - mCacheOffset;
if (mFinalStatus != OK) {
if (mFinalStatus != OK && mNumRetriesLeft == 0) {
if (delta >= mCache->totalSize()) {
return mFinalStatus;
}
@@ -591,7 +592,7 @@ status_t NuCachedSource2::seekInternal_l(off64_t offset) {
size_t totalSize = mCache->totalSize();
CHECK_EQ(mCache->releaseFromStart(totalSize), totalSize);
mFinalStatus = OK;
mNumRetriesLeft = kMaxNumRetries;
mFetching = true;
return OK;