diff options
author | Konstantin Ritt <ritt.ks@gmail.com> | 2013-12-26 14:50:45 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-12-28 04:47:18 +0100 |
commit | 28cd5aa9f9c222369c67a812aa7143e7b295bfa8 (patch) | |
tree | 5c9a01dfbad5654fb3be1906e513963393069f28 /src/plugins/organizer/memory/qorganizeritemmemorybackend.cpp | |
parent | d5221e614cad9485eb6ba549099e887122f8ae88 (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.cpp | 29 |
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; } } |