aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorthickbrick2010-10-12 18:21:07 +0200
committerthickbrick2010-10-12 18:21:07 +0200
commitf90beef498640a2f7fd083eac687acac16e28613 (patch)
tree8221520484e1c71d66614e4fd3c9a336a10795ab
parentMerge remote branch 'aleric/weekly' into weekly (diff)
downloadmeta-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.cpp13
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 {