summaryrefslogtreecommitdiffstats
path: root/src/corelib/codecs
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib/codecs')
-rw-r--r--src/corelib/codecs/qsimplecodec.cpp17
1 files changed, 10 insertions, 7 deletions
diff --git a/src/corelib/codecs/qsimplecodec.cpp b/src/corelib/codecs/qsimplecodec.cpp
index 728ebbb7f8..d24b4d4cfd 100644
--- a/src/corelib/codecs/qsimplecodec.cpp
+++ b/src/corelib/codecs/qsimplecodec.cpp
@@ -622,7 +622,7 @@ QSimpleTextCodec::QSimpleTextCodec(int i) : forwardIndex(i), reverseMap(0)
QSimpleTextCodec::~QSimpleTextCodec()
{
- delete reverseMap;
+ delete reverseMap.load();
}
static QByteArray *buildReverseMap(int forwardIndex)
@@ -674,10 +674,13 @@ QByteArray QSimpleTextCodec::convertFromUnicode(const QChar *in, int length, Con
const char replacement = (state && state->flags & ConvertInvalidToNull) ? 0 : '?';
int invalid = 0;
- if (!reverseMap){
- QByteArray *tmp = buildReverseMap(this->forwardIndex);
- if (!reverseMap.testAndSetOrdered(0, tmp))
- delete tmp;
+ QByteArray *rmap = reverseMap.load();
+ if (!rmap){
+ rmap = buildReverseMap(this->forwardIndex);
+ if (!reverseMap.testAndSetRelease(0, rmap)) {
+ delete rmap;
+ rmap = reverseMap.load();
+ }
}
QByteArray r(length, Qt::Uninitialized);
@@ -685,8 +688,8 @@ QByteArray QSimpleTextCodec::convertFromUnicode(const QChar *in, int length, Con
int u;
const QChar* ucp = in;
unsigned char* rp = (unsigned char *)r.data();
- const unsigned char* rmp = (const unsigned char *)reverseMap->constData();
- int rmsize = (int) reverseMap->size();
+ const unsigned char* rmp = (const unsigned char *)rmap->constData();
+ int rmsize = (int) rmap->size();
while(i--)
{
u = ucp->unicode();