[MessagingEmail] Remove all sync callbacks in destructor of MessageServiceEmail.
authorPawel Andruszkiewicz <p.andruszkie@samsung.com>
Thu, 28 May 2015 07:01:45 +0000 (09:01 +0200)
committerPawel Andruszkiewicz <p.andruszkie@samsung.com>
Thu, 28 May 2015 09:34:30 +0000 (18:34 +0900)
[Verification] TCT pass rate 309/305/1/3/0 (98.71%) - with email-service fixed.

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

index e729c567d7b4cf17438ff8d66569e58939069a82..251142dab8cc8f7a4e8eddb756104c559520b2c1 100644 (file)
@@ -843,6 +843,11 @@ void EmailManager::stopSync(long op_id)
 
 //################################## ^stopSync #################################
 
+void EmailManager::RemoveSyncCallback(long op_id) {
+  LoggerD("Entered");
+  m_proxy_sync->removeCallback(op_id);
+}
+
 void removeEmailCompleteCB(MessagesCallbackUserData* callback)
 {
   LoggerD("Entered");
index efcee6cd93afb9a1ecfc9bbcbcceb9464373ff1d..e17149fa91805a621f7be2ec9308a703b03c42b6 100644 (file)
@@ -82,6 +82,8 @@ public:
     void syncFolder(SyncFolderCallbackData* callback);
     void stopSync(long op_id);
 
+    void RemoveSyncCallback(long op_id);
+
 //    void registerStatusCallback(msg_handle_t msg_handle);
 
     /**
index e04d36c7bf9d9254ead329fa47ec2f6fe4ee7798..6b0ffc6ee36542b12c8dd84658e895afa3de5012 100644 (file)
@@ -21,9 +21,14 @@ MessageServiceEmail::MessageServiceEmail(int id, std::string name)
     LoggerD("Entered");
 }
 
-MessageServiceEmail::~MessageServiceEmail()
-{
-    LoggerD("Entered");
+MessageServiceEmail::~MessageServiceEmail() {
+  LoggerD("Entered");
+
+  for (auto id : registered_callbacks_) {
+    // this may internally fail, because we don't have information about
+    // callbacks which already have fired
+    EmailManager::getInstance().RemoveSyncCallback(id);
+  }
 }
 
 static gboolean sendMessageTask(void* data)
@@ -170,6 +175,7 @@ PlatformResult MessageServiceEmail::sync(SyncCallbackData *callback, long* opera
     return PlatformResult(ErrorCode::UNKNOWN_ERR, "Could not add task");
   }
   *operation_id = op_id;
+  registered_callbacks_.insert(op_id);
   return PlatformResult(ErrorCode::NO_ERROR);
 }
 
@@ -206,6 +212,7 @@ PlatformResult MessageServiceEmail::syncFolder(SyncFolderCallbackData *callback,
     return PlatformResult(ErrorCode::UNKNOWN_ERR, "Could not add task");
   }
   *operation_id = op_id;
+  registered_callbacks_.insert(op_id);
   return PlatformResult(ErrorCode::NO_ERROR);
 }
 
@@ -230,6 +237,7 @@ PlatformResult MessageServiceEmail::stopSync(long op_id)
 {
   LoggerD("Entered");
 
+  registered_callbacks_.erase(op_id);
   long* data = new long(op_id);
   guint id = g_idle_add(stopSyncTask, static_cast<void*>(data));
 
index 844ac4fc42099b1164f728e0356f44cac7fedbf2..580b49f02f1a3349941fa8614aaea025ae67d5ca 100755 (executable)
@@ -8,6 +8,8 @@
 
 #include "message_service.h"
 
+#include <unordered_set>
+
 namespace extension {
 namespace messaging {
 
@@ -22,6 +24,9 @@ public:
     virtual common::PlatformResult sync(SyncCallbackData *callback, long* operation_id);
     virtual common::PlatformResult syncFolder(SyncFolderCallbackData *callback, long* operation_id);
     virtual common::PlatformResult stopSync(long op_id);
+
+private:
+    std::unordered_set<long> registered_callbacks_;
 };
 
 } // messaging