diff options
author | Thiago Macieira <thiago.macieira@intel.com> | 2012-08-03 12:27:28 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-08-04 00:52:18 +0200 |
commit | 55662549485be9b47984d4a54e730f531fb01f4a (patch) | |
tree | 57a4790eee5d817b05eedaceb6c98471a61bdd96 /src/corelib/codecs | |
parent | 4e542d958a8fa81c91e55c1358e15c84e34d15de (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.cpp | 2 |
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(); |