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
..
2012-07-10 14:15:59 -04:00
2012-02-16 02:30:14 +01:00
2012-07-04 10:25:04 +00:00
2012-01-22 01:50:25 +01:00
2011-12-23 18:31:47 +01:00
2012-07-10 15:08:20 +02:00
2012-07-03 10:07:14 -04:00
2012-07-22 04:13:23 +02:00
2012-01-09 05:40:03 -05:00
2012-07-04 00:26:42 +00:00
2012-06-30 20:05:31 -05:00
2012-07-07 14:49:37 +02:00
2012-07-03 07:49:22 +02:00
2012-07-15 02:29:00 +02:00
2012-07-06 11:37:45 +00:00
2012-05-30 19:14:11 -05:00
2012-07-13 13:45:02 +02:00
2012-07-12 08:30:35 +02:00
2012-07-22 04:13:23 +02:00
2012-07-04 00:26:42 +00:00
2012-06-15 09:52:35 -05:00
2012-04-28 21:29:52 -04:00
2012-06-19 16:16:39 -04:00
2012-07-15 15:07:05 -04:00
2012-07-14 20:04:55 +02:00
2012-07-03 10:07:14 -04:00
2011-05-09 00:40:38 +02:00
2011-05-15 22:50:56 -05:00
2012-07-04 10:25:04 +00:00
2012-07-04 10:25:04 +00:00