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