diff --git a/src/core/tools/qhash.cpp b/src/core/tools/qhash.cpp index cc9311b05..1fdb82316 100644 --- a/src/core/tools/qhash.cpp +++ b/src/core/tools/qhash.cpp @@ -166,7 +166,7 @@ static int countBits(int hint) const int MinNumBits = 4; QHashData QHashData::shared_null = { - 0, QAtomicInt(1), 0, 0, MinNumBits, 0, 0, true + 0, 0, QAtomicInt(1), 0, 0, MinNumBits, 0, 0, true }; QHashData *QHashData::detach_helper(void (*node_duplicate)(Node *, void *), @@ -178,6 +178,7 @@ QHashData *QHashData::detach_helper(void (*node_duplicate)(Node *, void *), Node *e; }; d = new QHashData; + d->fakeNext = 0; d->buckets = 0; d->ref = 1; d->size = size; @@ -372,6 +373,7 @@ void QHashData::dump() qDebug("Hash data (ref = %d, size = %d, nodeSize = %d, userNumBits = %d, numBits = %d, numBuckets = %d)", int(ref), size, nodeSize, userNumBits, numBits, numBuckets); + qDebug(" %p (fakeNode = %p)", this, fakeNext); for (int i = 0; i < numBuckets; ++i) { QString line; Node *n = buckets[i]; @@ -392,6 +394,9 @@ void QHashData::dump() void QHashData::checkSanity() { + if (fakeNext) + qFatal("Fake next isn't 0"); + for (int i = 0; i < numBuckets; ++i) { Node *n = buckets[i]; Node *p = n; diff --git a/src/core/tools/qhash.h b/src/core/tools/qhash.h index caa8c979f..acb4a71ef 100644 --- a/src/core/tools/qhash.h +++ b/src/core/tools/qhash.h @@ -104,6 +104,7 @@ struct Q_CORE_EXPORT QHashData uint h; }; + Node *fakeNext; Node **buckets; QAtomicInt ref; int size; @@ -111,7 +112,7 @@ struct Q_CORE_EXPORT QHashData short userNumBits; short numBits; int numBuckets; - bool sharable; + uint sharable : 1; QHashData *detach_helper(void (*node_duplicate)(Node *, void *), void (*node_delete)(Node *), int nodeSize);