diff options
author | Igor Mironchik <igor.mironchik@gmail.com> | 2018-05-24 15:59:23 +0300 |
---|---|---|
committer | Igor Mironchik <igor.mironchik@gmail.com> | 2018-05-26 18:50:24 +0000 |
commit | 03ab94b0e7a549bcf839639438f782a47522ffa7 (patch) | |
tree | 837102d496567487e5418670a6897ff368c6334a /src/corelib/codecs | |
parent | d4349f1acd0fcb7665cbb957dc0c77d4ca30470a (diff) |
Deregister QTextCodec on destruction
QTextCodec automatically deregisters on destruction now.
[ChangeLog][QtCore][QTextCodec] QTextCodec automatically
deregisters on destruction now.
Task-number: QTBUG-56203
Change-Id: Ic9a66c512642c9913aa27ea5167b9f7341e7f0fe
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/codecs')
-rw-r--r-- | src/corelib/codecs/qtextcodec.cpp | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/corelib/codecs/qtextcodec.cpp b/src/corelib/codecs/qtextcodec.cpp index 1541c498e6..7951e95db5 100644 --- a/src/corelib/codecs/qtextcodec.cpp +++ b/src/corelib/codecs/qtextcodec.cpp @@ -492,6 +492,24 @@ QTextCodec::QTextCodec() */ QTextCodec::~QTextCodec() { + QCoreGlobalData *globalData = QCoreGlobalData::instance(); + if (!globalData) + return; + + globalData->codecForLocale.testAndSetRelaxed(this, nullptr); + + QMutexLocker locker(textCodecsMutex()); + + globalData->allCodecs.removeOne(this); + + auto it = globalData->codecCache.cbegin(); + + while (it != globalData->codecCache.cend()) { + if (it.value() == this) + it = globalData->codecCache.erase(it); + else + ++it; + } } /*! |