From: Oswald Buddenhagen Date: Mon, 12 Aug 2013 19:12:36 +0000 (+0200) Subject: avoid deadlock in cache() during spec/cache loading X-Git-Tag: accepted/tizen/20131212.181521~83^2~10 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=87fcdcba087f37171511fa58451cbe1ee5673169;p=platform%2Fupstream%2Fqttools.git avoid deadlock in cache() during spec/cache loading sync up; doesn't do anything in lupdate. if we end up calling cache() from within the initialization of the base context, we cannot wait for for the completion of that initialization before we proceed, obviously. Change-Id: If30c6f3665fe423e767373a8821c406b2f5e0eca Reviewed-by: Joerg Bornemann Reviewed-by: Daniel Teske (cherry picked from qtcreator/b64b4431c20afd9e39c1463e736f998ef450688f) --- diff --git a/src/linguist/shared/qmakebuiltins.cpp b/src/linguist/shared/qmakebuiltins.cpp index 37654a2..4712df5 100644 --- a/src/linguist/shared/qmakebuiltins.cpp +++ b/src/linguist/shared/qmakebuiltins.cpp @@ -1558,7 +1558,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional( break; #ifdef PROEVALUATOR_THREAD_SAFE QMutexLocker locker(&baseEnv->mutex); - if (baseEnv->inProgress) { + if (baseEnv->inProgress && baseEnv->evaluator != this) { // The env is still in the works, but it may be already past the cache // loading. So we need to wait for completion and amend it as usual. QThreadPool::globalInstance()->releaseThread();