From e7665fd8e41176db517465b7732d53e3e29be876 Mon Sep 17 00:00:00 2001 From: Giuseppe D'Angelo Date: Sun, 13 Jul 2014 16:22:49 +0200 Subject: [PATCH] Revert "QRegularExpression: lock a mutex only if there's actual work to do" Blunder -- two threads may step into this method together, both see not studied, and both study (with one leaking its study data). This reverts commit 5fbd787cf9a72621d66604a4898f06ea4365226e. Change-Id: Ia746925abcad1e43adf4f6f1d495b018de022b07 Reviewed-by: Olivier Goffart --- src/corelib/tools/qregularexpression.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/corelib/tools/qregularexpression.cpp b/src/corelib/tools/qregularexpression.cpp index 4babfe1e19..259cfaba7e 100644 --- a/src/corelib/tools/qregularexpression.cpp +++ b/src/corelib/tools/qregularexpression.cpp @@ -1149,11 +1149,11 @@ void QRegularExpressionPrivate::optimizePattern(OptimizePatternOption option) { Q_ASSERT(compiledPattern); + QMutexLocker lock(&mutex); + if (studyData.load()) // already optimized return; - QMutexLocker lock(&mutex); - if ((option == LazyOptimizeOption) && (++usedCount != qt_qregularexpression_optimize_after_use_count)) return;