[MessagingEmail] Remove all listeners in destructor of MessageStorage.
authorPawel Andruszkiewicz <p.andruszkie@samsung.com>
Wed, 27 May 2015 12:30:55 +0000 (14:30 +0200)
committerPawel Andruszkiewicz <p.andruszkie@samsung.com>
Thu, 28 May 2015 07:09:28 +0000 (16:09 +0900)
[Verification] TCT 309/293/1/15/0 (94.82%).

Change-Id: Id2d26c1ebddc1e679fcf4dc2c3e948a607652259
Signed-off-by: Pawel Andruszkiewicz <p.andruszkie@samsung.com>
src/messaging/message_storage.cc
src/messaging/message_storage.h

index 935bac249f429dd65e46dedf701b2451e91fa327..27830fcd23fea0bcf87b544084c14adb13e1d2cb 100644 (file)
@@ -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<MessagesChangeCallback> 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<ConversationsChangeCallback> 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<FoldersChangeCallback> 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
index 7b7b89c33613b0c8c02fabd1df4f7c8a41461fe7..0bf2251cea50814d08f544fe66e3ce594e8f5e27 100644 (file)
@@ -6,6 +6,7 @@
 #define MESSAGING_MESSAGE_STORAGE_H_
 
 #include <memory>
+#include <unordered_set>
 
 #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<long> registered_listeners_;
 };
 
 }    //messaging