From 55662549485be9b47984d4a54e730f531fb01f4a Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Fri, 3 Aug 2012 12:27:28 +0200 Subject: [PATCH] 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 --- src/corelib/codecs/qtextcodec.cpp | 2 ++ 1 file changed, 2 insertions(+) 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();