From bfc437726e37ebf74acb0c93d191f47b6935ecae Mon Sep 17 00:00:00 2001
From: Pawel Andruszkiewicz
Date: Wed, 27 May 2015 14:30:55 +0200
Subject: [PATCH] [MessagingEmail] Remove all listeners in destructor of
MessageStorage.
[Verification] TCT 309/293/1/15/0 (94.82%).
Change-Id: Id2d26c1ebddc1e679fcf4dc2c3e948a607652259
Signed-off-by: Pawel Andruszkiewicz
---
src/messaging/message_storage.cc | 24 +++++++++++++++++-------
src/messaging/message_storage.h | 2 ++
2 files changed, 19 insertions(+), 7 deletions(-)
diff --git a/src/messaging/message_storage.cc b/src/messaging/message_storage.cc
index 935bac24..27830fcd 100644
--- a/src/messaging/message_storage.cc
+++ b/src/messaging/message_storage.cc
@@ -19,9 +19,12 @@ MessageStorage::MessageStorage(int id, MessageType msgType) :
LoggerD("Entered");
}
-MessageStorage::~MessageStorage()
-{
- LoggerD("Entered");
+MessageStorage::~MessageStorage() {
+ LoggerD("Entered");
+
+ for (auto id : registered_listeners_) {
+ ChangeListenerContainer::getInstance().removeChangeListener(id);
+ }
}
int MessageStorage::getMsgServiceId() const
@@ -43,26 +46,33 @@ std::string MessageStorage::getMsgServiceTypeString() const {
long MessageStorage::addMessagesChangeListener(std::shared_ptr callback)
{
LoggerD("Entered");
- return ChangeListenerContainer::getInstance().addMessageChangeListener(callback);
+ long id = ChangeListenerContainer::getInstance().addMessageChangeListener(callback);
+ registered_listeners_.insert(id);
+ return id;
}
long MessageStorage::addConversationsChangeListener(
std::shared_ptr callback)
{
LoggerD("Entered");
- return ChangeListenerContainer::getInstance().addConversationChangeListener(callback);
+ long id = ChangeListenerContainer::getInstance().addConversationChangeListener(callback);
+ registered_listeners_.insert(id);
+ return id;
}
long MessageStorage::addFoldersChangeListener(std::shared_ptr callback)
{
LoggerD("Entered");
- return ChangeListenerContainer::getInstance().addFolderChangeListener(callback);
+ long id = ChangeListenerContainer::getInstance().addFolderChangeListener(callback);
+ registered_listeners_.insert(id);
+ return id;
}
void MessageStorage::removeChangeListener(long watchId)
{
LoggerD("Entered");
- return ChangeListenerContainer::getInstance().removeChangeListener(watchId);
+ ChangeListenerContainer::getInstance().removeChangeListener(watchId);
+ registered_listeners_.erase(watchId);
}
} //messaging
diff --git a/src/messaging/message_storage.h b/src/messaging/message_storage.h
index 7b7b89c3..0bf2251c 100644
--- a/src/messaging/message_storage.h
+++ b/src/messaging/message_storage.h
@@ -6,6 +6,7 @@
#define MESSAGING_MESSAGE_STORAGE_H_
#include
+#include
#include "common/platform_result.h"
#include "common/logger.h"
@@ -54,6 +55,7 @@ public:
protected:
int m_id;
MessageType m_msg_type;
+ std::unordered_set registered_listeners_;
};
} //messaging
--
2.34.1