Don't hold onto the lock while reconnecting to the server

to avoid stalling the readers.

Change-Id: I73b646587c8a654a73ff7d800c0f17bd78001855
This commit is contained in:
Andreas Huber
2011-10-17 15:49:01 -07:00
parent 421648ed06
commit 96e35f2e57

View File

@@ -279,6 +279,8 @@ void NuCachedSource2::onMessageReceived(const sp<AMessage> &msg) {
void NuCachedSource2::fetchInternal() {
LOGV("fetchInternal");
bool reconnect = false;
{
Mutex::Autolock autoLock(mLock);
CHECK(mFinalStatus == OK || mNumRetriesLeft > 0);
@@ -286,18 +288,24 @@ void NuCachedSource2::fetchInternal() {
if (mFinalStatus != OK) {
--mNumRetriesLeft;
status_t err =
mSource->reconnectAtOffset(mCacheOffset + mCache->totalSize());
reconnect = true;
}
}
if (err == ERROR_UNSUPPORTED) {
mNumRetriesLeft = 0;
return;
} else if (err != OK) {
LOGI("The attempt to reconnect failed, %d retries remaining",
mNumRetriesLeft);
if (reconnect) {
status_t err =
mSource->reconnectAtOffset(mCacheOffset + mCache->totalSize());
return;
}
Mutex::Autolock autoLock(mLock);
if (err == ERROR_UNSUPPORTED) {
mNumRetriesLeft = 0;
return;
} else if (err != OK) {
LOGI("The attempt to reconnect failed, %d retries remaining",
mNumRetriesLeft);
return;
}
}