From 9d4a1f3cd59c24afc9a7b26437c998b04618ca5e Mon Sep 17 00:00:00 2001 From: Ronan Abhamon Date: Wed, 8 Nov 2017 15:21:51 +0100 Subject: [PATCH] feat(MainDb): add a weak list of event references --- src/core/core.h | 1 + src/db/main-db-event-key.cpp | 9 ++++++--- src/db/main-db-p.h | 3 +++ src/db/main-db.cpp | 4 +++- src/db/main-db.h | 2 ++ 5 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/core/core.h b/src/core/core.h index a56807681..ab0063512 100644 --- a/src/core/core.h +++ b/src/core/core.h @@ -38,6 +38,7 @@ class LINPHONE_PUBLIC Core : public Object { friend class ChatRoom; friend class ClientGroupChatRoom; friend class MainDb; + friend class MainDbEventKey; public: L_OVERRIDE_SHARED_FROM_THIS(Core); diff --git a/src/db/main-db-event-key.cpp b/src/db/main-db-event-key.cpp index a363ba3c4..fdc354be9 100644 --- a/src/db/main-db-event-key.cpp +++ b/src/db/main-db-event-key.cpp @@ -17,7 +17,9 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ +#include "core/core-p.h" #include "main-db-event-key-p.h" +#include "main-db-p.h" // ============================================================================= @@ -44,9 +46,10 @@ MainDbEventKey::MainDbEventKey (const MainDbEventKey &src) : MainDbEventKey() { } MainDbEventKey::~MainDbEventKey () { - if (isValid()) { - // TODO: Remove key from main db references if necessary. - } + L_D(); + + if (isValid()) + d->core.lock()->getPrivate()->mainDb->getPrivate()->storageIdToEvent.erase(d->storageId); } MainDbEventKey &MainDbEventKey::operator= (const MainDbEventKey &src) { diff --git a/src/db/main-db-p.h b/src/db/main-db-p.h index 9a2715a67..ba4a9c23c 100644 --- a/src/db/main-db-p.h +++ b/src/db/main-db-p.h @@ -31,6 +31,9 @@ LINPHONE_BEGIN_NAMESPACE class Content; class MainDbPrivate : public AbstractDbPrivate { +public: + std::unordered_map> storageIdToEvent; + private: // --------------------------------------------------------------------------- // Low level API. diff --git a/src/db/main-db.cpp b/src/db/main-db.cpp index a10495446..700cf46d6 100644 --- a/src/db/main-db.cpp +++ b/src/db/main-db.cpp @@ -833,8 +833,10 @@ MainDb::MainDb (const shared_ptr &core) : AbstractDb(*new MainDbPrivate), L_END_LOG_EXCEPTION - if (soFarSoGood) + if (soFarSoGood) { dEventLog->dbKey = MainDbEventKey(getCore(), storageId); + d->storageIdToEvent[storageId] = eventLog; + } return soFarSoGood; } diff --git a/src/db/main-db.h b/src/db/main-db.h index acfae01c7..d675a0186 100644 --- a/src/db/main-db.h +++ b/src/db/main-db.h @@ -36,6 +36,8 @@ class EventLog; class MainDbPrivate; class MainDb : public AbstractDb, public CoreAccessor { + friend class MainDbEventKey; + public: enum Filter { NoFilter = 0x0,