[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)
committerHyunjin Park <hj.na.park@samsung.com>
Wed, 3 Jun 2015 02:43:52 +0000 (11:43 +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 104ac2b625b105b7c35dd05c3baa1633c20fc6f1..7ce8304b102e62f520fa868e88768cb9fe24bd77 100755 (executable)
@@ -31,9 +31,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
@@ -55,26 +58,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 5e7da2fe329d58e1decc818ab0ad3dc945191909..6db19f1d9da5c8e24975521feb8ced6792a42d77 100755 (executable)
@@ -18,6 +18,7 @@
 #define MESSAGING_MESSAGE_STORAGE_H_
 
 #include <memory>
+#include <unordered_set>
 
 #include "common/platform_result.h"
 #include "common/logger.h"
@@ -66,6 +67,7 @@ public:
 protected:
     int m_id;
     MessageType m_msg_type;
+    std::unordered_set<long> registered_listeners_;
 };
 
 }    //messaging