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
..
2011-06-06 21:38:58 +02:00
2012-01-27 05:08:15 +01:00
2011-06-06 21:38:58 +02:00
2011-06-06 21:38:58 +02:00
2011-06-06 21:38:58 +02:00
2011-06-06 21:38:58 +02:00
2011-06-06 21:38:58 +02:00
2011-06-06 21:38:58 +02:00
2011-06-06 21:38:58 +02:00
2011-06-06 21:38:58 +02:00
2011-06-06 21:38:58 +02:00
2012-07-02 19:45:41 +00:00
2011-06-06 21:38:58 +02:00
2011-09-20 21:39:27 -05:00
2011-10-03 22:45:13 -05:00
2012-04-29 00:25:40 -04:00
2012-01-25 23:45:18 +01:00
2012-07-22 04:13:23 +02:00
2012-02-01 03:33:39 +01:00
2011-09-20 21:39:27 -05:00
2011-06-06 21:38:58 +02:00
2010-04-02 02:48:44 -03:00
2010-04-02 02:48:44 -03:00