From: Pawel Andruszkiewicz
Date: Thu, 28 May 2015 07:01:45 +0000 (+0200)
Subject: [MessagingEmail] Remove all sync callbacks in destructor of MessageServiceEmail.
X-Git-Tag: submit/tizen_mobile/20150612.133019^2~2^2~117
X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6810043cc53e0a6581acea312b6f962901935309;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git
[MessagingEmail] Remove all sync callbacks in destructor of MessageServiceEmail.
[Verification] TCT pass rate 309/305/1/3/0 (98.71%) - with email-service fixed.
Change-Id: I64f753e80071d7a59f2d0e96642c3b98c8e2a5ed
Signed-off-by: Pawel Andruszkiewicz
---
diff --git a/src/messaging/email_manager.cc b/src/messaging/email_manager.cc
index e729c567..251142da 100644
--- a/src/messaging/email_manager.cc
+++ b/src/messaging/email_manager.cc
@@ -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");
diff --git a/src/messaging/email_manager.h b/src/messaging/email_manager.h
index efcee6cd..e17149fa 100644
--- a/src/messaging/email_manager.h
+++ b/src/messaging/email_manager.h
@@ -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);
/**
diff --git a/src/messaging/message_service_email.cc b/src/messaging/message_service_email.cc
index e04d36c7..6b0ffc6e 100644
--- a/src/messaging/message_service_email.cc
+++ b/src/messaging/message_service_email.cc
@@ -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(data));
diff --git a/src/messaging/message_service_email.h b/src/messaging/message_service_email.h
index 844ac4fc..580b49f0 100755
--- a/src/messaging/message_service_email.h
+++ b/src/messaging/message_service_email.h
@@ -8,6 +8,8 @@
#include "message_service.h"
+#include
+
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 registered_callbacks_;
};
} // messaging