diff options
author | thickbrick | 2010-10-12 18:21:07 +0200 |
---|---|---|
committer | thickbrick | 2010-10-12 18:21:07 +0200 |
commit | f90beef498640a2f7fd083eac687acac16e28613 (patch) | |
tree | 8221520484e1c71d66614e4fd3c9a336a10795ab | |
parent | Merge remote branch 'aleric/weekly' into weekly (diff) | |
download | meta-impy-f90beef498640a2f7fd083eac687acac16e28613.zip meta-impy-f90beef498640a2f7fd083eac687acac16e28613.tar.gz meta-impy-f90beef498640a2f7fd083eac687acac16e28613.tar.bz2 meta-impy-f90beef498640a2f7fd083eac687acac16e28613.tar.xz |
Don't try to fetch http-textures past end of file
Treat http texture requests that returned less data than requsted
as indication that we have the whole file, even if we did not
specifically requested the whole file by using a very large range
yet.
IMPORTANT: This will fail to load past 599 bytes in OpenSim <= 0.7.0.2,
as it has buggy handling of ranged requests. But OpenSim http texture
breakage is not new. http://opensimulator.org/mantis/view.php?id=5081
-rw-r--r-- | linden/indra/newview/lltexturefetch.cpp | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/linden/indra/newview/lltexturefetch.cpp b/linden/indra/newview/lltexturefetch.cpp index 5cad14c..bf97584 100644 --- a/linden/indra/newview/lltexturefetch.cpp +++ b/linden/indra/newview/lltexturefetch.cpp | |||
@@ -317,7 +317,7 @@ public: | |||
317 | mFetcher->mTextureInfo.setRequestCompleteTimeAndLog(mID, timeNow); | 317 | mFetcher->mTextureInfo.setRequestCompleteTimeAndLog(mID, timeNow); |
318 | } | 318 | } |
319 | 319 | ||
320 | lldebugs << "HTTP COMPLETE: " << mID << llendl; | 320 | LL_DEBUGS("TextureFetch") << "HTTP COMPLETE: " << mID << " with status: " << status << LL_ENDL; |
321 | mFetcher->lockQueue(); | 321 | mFetcher->lockQueue(); |
322 | LLTextureFetchWorker* worker = mFetcher->getWorker(mID); | 322 | LLTextureFetchWorker* worker = mFetcher->getWorker(mID); |
323 | if (worker) | 323 | if (worker) |
@@ -882,10 +882,11 @@ bool LLTextureFetchWorker::doWork(S32 param) | |||
882 | mLoaded = FALSE; | 882 | mLoaded = FALSE; |
883 | mGetStatus = 0; | 883 | mGetStatus = 0; |
884 | mGetReason.clear(); | 884 | mGetReason.clear(); |
885 | lldebugs << "HTTP GET: " << mID << " Offset: " << offset | 885 | LL_DEBUGS("TextureFetch") << "HTTP GET: " << mID << " Offset: " << offset |
886 | << " Bytes: " << mRequestedSize | 886 | << " Bytes: " << mRequestedSize |
887 | << " Range: " << offset << "-" << offset+mRequestedSize-1 | ||
887 | << " Bandwidth(kbps): " << mFetcher->getTextureBandwidth() << "/" << max_bandwidth | 888 | << " Bandwidth(kbps): " << mFetcher->getTextureBandwidth() << "/" << max_bandwidth |
888 | << llendl; | 889 | << LL_ENDL; |
889 | setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority); | 890 | setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority); |
890 | mState = WAIT_HTTP_REQ; | 891 | mState = WAIT_HTTP_REQ; |
891 | 892 | ||
@@ -1322,18 +1323,18 @@ void LLTextureFetchWorker::callbackHttpGet(const LLChannelDescriptors& channels, | |||
1322 | 1323 | ||
1323 | gImageList.sTextureBits += data_size * 8; // Approximate - does not include header bits | 1324 | gImageList.sTextureBits += data_size * 8; // Approximate - does not include header bits |
1324 | 1325 | ||
1325 | //llinfos << "HTTP RECEIVED: " << mID.asString() << " Bytes: " << data_size << llendl; | 1326 | LL_DEBUGS("TextureFetch") << "HTTP RECEIVED: " << mID.asString() << " Bytes: " << data_size << " mRequestedSize: " << mRequestedSize << LL_ENDL; |
1326 | if (data_size > 0) | 1327 | if (data_size > 0) |
1327 | { | 1328 | { |
1328 | // *TODO: set the formatted image data here directly to avoid the copy | 1329 | // *TODO: set the formatted image data here directly to avoid the copy |
1329 | mBuffer = new U8[data_size]; | 1330 | mBuffer = new U8[data_size]; |
1330 | buffer->readAfter(channels.in(), NULL, mBuffer, data_size); | 1331 | buffer->readAfter(channels.in(), NULL, mBuffer, data_size); |
1331 | mBufferSize += data_size; | 1332 | mBufferSize += data_size; |
1332 | if (data_size < mRequestedSize && | 1333 | if (data_size < mRequestedSize) |
1333 | (mRequestedDiscard == 0 || mRequestedSize >= MAX_IMAGE_DATA_SIZE) ) | ||
1334 | { | 1334 | { |
1335 | // We requested whole image (by discard or by size,) so assume we got it | 1335 | // We requested whole image (by discard or by size,) so assume we got it |
1336 | mHaveAllData = TRUE; | 1336 | mHaveAllData = TRUE; |
1337 | mRequestedDiscard = 0; | ||
1337 | } | 1338 | } |
1338 | else if (data_size > mRequestedSize) | 1339 | else if (data_size > mRequestedSize) |
1339 | { | 1340 | { |