index d5c7d1b..06e21f8 100644 --- a/src/declarative/util/qdeclarativexmllistmodel.cpp +++ b/src/declarative/util/qdeclarativexmllistmodel.cpp @@ -173,6 +173,13 @@ public: int doQuery(QString query, QString namespaces, QByteArray data, QList* roleObjects, QStringList keyRoleResultsCache) { + { + QMutexLocker ml(&m_mutex); + m_queryIds.ref(); + if (m_queryIds <= 0) + m_queryIds = 1; + } + XmlQueryJob job; job.queryId = m_queryIds; job.data = data; @@ -194,9 +201,6 @@ public: { QMutexLocker ml(&m_mutex); m_jobs.insert(m_queryIds, job); - m_queryIds++; - if (m_queryIds <= 0) - m_queryIds = 1; } QMetaObject::invokeMethod(this, "processQuery", Qt::QueuedConnection, Q_ARG(int, job.queryId)); @@ -250,7 +254,7 @@ private: QMutex m_mutex; QThread m_thread; QMap m_jobs; - int m_queryIds; + QAtomicInt m_queryIds; QString m_prefix; int m_size; QList > m_modelData;