Aleric Inglewood
2830b35aa6
Avoid dead lock in LLQueuedThread::generateHandle / LLTextureFetchWorker::callbackDecoded
...
Thead 1:
indra/llcommon/llqueuedthread.cpp:456:
452 if (complete)
453 {
454 lockData(); // This locks LLThread::mRunCondition
455 req->setStatus(STATUS_COMPLETE);
456 req->finishRequest(true);
LLImageDecodeThread::ImageRequest::finishRequest calls:
mResponder->completed(success, mDecodedImageRaw, mDecodedImageAux);
LLTextureFetchWorker::DecodeResponder::completed calls:
worker->callbackDecoded(success, raw, aux);
LLTextureFetchWorker::callbackDecoded calls:
LLMutexLock lock(&mWorkMutex); // This locks LLTextureFetchWorker::mWorkMutex
Thread 2:
LLTextureFetchWorker::doWork calls:
LLMutexLock lock(&mWorkMutex); // This locks LLTextureFetchWorker::mWorkMutex
.
.
.
mDecodeHandle = mFetcher->mImageDecodeThread->decodeImage(mFormattedImage, image_priority, discard, mNeedsAux, new DecodeResponder(mFetcher, mID, this));
LLImageDecodeThread::decodeImage calls:
handle_t handle = generateHandle();
LLQueuedThread::generateHandle calls:
lockData(); // This locks LLThread::mRunCondition
2012-07-22 04:13:23 +02:00
Aleric Inglewood
5d87098bd0
Port Viewer 2 indra/llvfs
...
This introduces some API changes, like the new LLDirIterator,
that causes changes elsewhere.
It also include Log Linden's cache changes that aren't in
viewer-development yet that increase the maximum cache size
to ~10 GB.
2011-06-06 21:38:58 +02:00