summaryrefslogtreecommitdiffstats
path: root/src/corelib/codecs
diff options
context:
space:
mode:
authorThiago Macieira <thiago.macieira@intel.com>2012-08-03 12:27:28 +0200
committerQt by Nokia <qt-info@nokia.com>2012-08-04 00:52:18 +0200
commit55662549485be9b47984d4a54e730f531fb01f4a (patch)
tree57a4790eee5d817b05eedaceb6c98471a61bdd96 /src/corelib/codecs
parent4e542d958a8fa81c91e55c1358e15c84e34d15de (diff)
ICU: lock the mutex before calling an Unlocked function
The QIcuCodec::defaultCodecUnlocked function is not thread-safe because it calls codecForNameUnlocked. In turn, that one accesses and even modifies a QHash stored in the QCoreGlobalData singleton, which is what makes it non-threadsafe. In order to call the Unlocked function, we need to lock the mutex first. Change-Id: I915570110229f4c0929986aa26731244317ef6ab Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
Diffstat (limited to 'src/corelib/codecs')
-rw-r--r--src/corelib/codecs/qtextcodec.cpp2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/corelib/codecs/qtextcodec.cpp b/src/corelib/codecs/qtextcodec.cpp
index 35a430cf65..c376e10995 100644
--- a/src/corelib/codecs/qtextcodec.cpp
+++ b/src/corelib/codecs/qtextcodec.cpp
@@ -683,7 +683,9 @@ QTextCodec* QTextCodec::codecForLocale()
QTextCodec *codec = globalData->codecForLocale.loadAcquire();
if (!codec) {
#ifdef QT_USE_ICU
+ textCodecsMutex()->lock();
codec = QIcuCodec::defaultCodecUnlocked();
+ textCodecsMutex()->unlock();
#else
// setupLocaleMapper locks as necessary
codec = setupLocaleMapper();