summaryrefslogtreecommitdiffstats
path: root/src/plugins/organizer/memory/qorganizeritemmemorybackend.cpp
diff options
context:
space:
mode:
authorKonstantin Ritt <ritt.ks@gmail.com>2013-12-26 14:50:45 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-12-28 04:47:18 +0100
commit28cd5aa9f9c222369c67a812aa7143e7b295bfa8 (patch)
tree5c9a01dfbad5654fb3be1906e513963393069f28 /src/plugins/organizer/memory/qorganizeritemmemorybackend.cpp
parentd5221e614cad9485eb6ba549099e887122f8ae88 (diff)
[QOrganizerItemMemoryEngine] Don't keep anonymous store in hash
This solves a possible issue when "id" parameter value equals to some existing anonymous store's UUID. Change-Id: I5608310f02674e6b2e54512cc5c6c06a3ff94aba Reviewed-by: Robin Burchell <robin+qt@viroteck.net>
Diffstat (limited to 'src/plugins/organizer/memory/qorganizeritemmemorybackend.cpp')
-rw-r--r--src/plugins/organizer/memory/qorganizeritemmemorybackend.cpp29
1 files changed, 15 insertions, 14 deletions
diff --git a/src/plugins/organizer/memory/qorganizeritemmemorybackend.cpp b/src/plugins/organizer/memory/qorganizeritemmemorybackend.cpp
index 838ce23c9..e141bdd23 100644
--- a/src/plugins/organizer/memory/qorganizeritemmemorybackend.cpp
+++ b/src/plugins/organizer/memory/qorganizeritemmemorybackend.cpp
@@ -100,8 +100,6 @@ QString QOrganizerItemMemoryFactory::managerName() const
no longer requires this engine.
*/
-/* static data for manager class */
-QMap<QString, QOrganizerItemMemoryEngineData*> QOrganizerItemMemoryEngine::engineDatas;
/*!
\class QOrganizerItemMemoryEngineId
@@ -287,13 +285,16 @@ uint QOrganizerCollectionMemoryEngineId::hash() const
return m_collectionId;
}
+
+typedef QHash<QString, QOrganizerItemMemoryEngineData *> EngineDatas;
+Q_GLOBAL_STATIC(EngineDatas, theEngineDatas);
+
/*! Constructor of a QOrganizerItemMemoryEngineData object
*/
QOrganizerItemMemoryEngineData::QOrganizerItemMemoryEngineData()
: QSharedData(),
m_nextOrganizerItemId(1),
- m_nextOrganizerCollectionId(2),
- m_anonymous(false)
+ m_nextOrganizerCollectionId(2)
{
}
@@ -307,20 +308,17 @@ QOrganizerItemMemoryEngineData::QOrganizerItemMemoryEngineData()
*/
QOrganizerItemMemoryEngine* QOrganizerItemMemoryEngine::createMemoryEngine(const QMap<QString, QString>& parameters)
{
- bool anonymous = false;
QString idValue = parameters.value(QStringLiteral("id"));
- if (idValue.isNull() || idValue.isEmpty()) {
- // no store given? new, anonymous store.
- idValue = QUuid::createUuid().toString();
- anonymous = true;
- }
+ EngineDatas &engineDatas = *theEngineDatas();
QOrganizerItemMemoryEngineData* data = engineDatas.value(idValue);
if (!data) {
data = new QOrganizerItemMemoryEngineData();
- data->m_id = idValue;
- data->m_anonymous = anonymous;
- engineDatas.insert(idValue, data);
+ // no store given? new, anonymous store.
+ if (!idValue.isEmpty()) {
+ data->m_id = idValue;
+ engineDatas.insert(idValue, data);
+ }
}
data->ref.ref();
return new QOrganizerItemMemoryEngine(data);
@@ -353,7 +351,10 @@ QOrganizerItemMemoryEngine::~QOrganizerItemMemoryEngine()
{
d->m_sharedEngines.removeAll(this);
if (!d->ref.deref()) {
- engineDatas.remove(d->m_id);
+ if (!d->m_id.isEmpty()) {
+ EngineDatas &engineDatas = *theEngineDatas();
+ engineDatas.remove(d->m_id);
+ }
delete d;
}
}