Update change log and spec for wrt-plugins-tizen_0.2.77
authorKisub Song <kisubs.song@samsung.com>
Tue, 4 Sep 2012 05:01:45 +0000 (14:01 +0900)
committerKisub Song <kisubs.song@samsung.com>
Tue, 4 Sep 2012 05:01:45 +0000 (14:01 +0900)
Changed Modules : Contact

[Version] 0.2.77
[Project] GT-I8800, Public
[Title] SEL Verification
[Team] WebAPI
[BinType] PDA
[Customer] Open

[Issue#] N_SE-8584
[Problem] Lock-up when the change listener callback invoked.
[Cause] The change listener callback invoked on the main thread.
[Solution] Changed to pass event to contact thread.

[SCMRequest] N/A

debian/changelog
packaging/wrt-plugins-tizen.spec
src/platform/Tizen/Contact/AddressBook.cpp
src/platform/Tizen/Contact/AddressBook.h
src/platform/Tizen/Contact/ContactsSvcChangeListenerManager.cpp [moved from src/platform/Tizen/Contact/ContactListenerManager.cpp with 82% similarity]
src/platform/Tizen/Contact/ContactsSvcChangeListenerManager.h [moved from src/platform/Tizen/Contact/ContactListenerManager.h with 74% similarity]
src/platform/Tizen/Contact/config.cmake

index 21d6c3e..ad39c40 100644 (file)
@@ -1,3 +1,11 @@
+wrt-plugins-tizen (0.2.77) unstable; urgency=low
+
+  * Bug fix on Power and MediaContent
+  * Git : slp/pkgs/w/wrt-plugins-tizen
+  * Tag : wrt-plugins-tizen_0.2.77
+
+ -- Kisub Song <kisubs.song@samsung.com>  Tue, 04 Sep 2012 13:57:20 +0900
+
 wrt-plugins-tizen (0.2.76) unstable; urgency=low
 
   * Bug fix on Power and MediaContent
index 74cab58..760ad48 100755 (executable)
@@ -1,6 +1,6 @@
 Name:       wrt-plugins-tizen
 Summary:    JavaScript plugins for WebRuntime
-Version:    0.2.76
+Version:    0.2.77
 Release:    0
 Group:      TO_BE_FILLED
 License:    TO_BE_FILLED
index 86dc699..b751dc0 100755 (executable)
@@ -62,7 +62,7 @@ AddressBook::~AddressBook()
 {
        if(m_addressBookEmitters.size() != 0)
        {
-               ContactListenerManagerSingleton::Instance().unregisterAppListChangedCallbacks(this);
+               ContactsSvcChangeListenerManagerSingleton::Instance().unregisterAppListChangedCallbacks(this);
        }
 }
 
@@ -676,12 +676,12 @@ void AddressBook::OnRequestReceived(const EventAddressBookAddChangeListenerPtr &
                {
                        LogDebug("Watch registered initially");
 
-                       ContactListenerManagerSingleton::Instance().registerAppListChangedCallbacks(this, m_id);
+                       ContactsSvcChangeListenerManagerSingleton::Instance().registerAppListChangedCallbacks(this, m_id);
                }
 
                m_addressBookEmitters.attach(emitter);
 
-               long id = ContactListenerManagerSingleton::Instance().getWatchIdAndInc();
+               long id = ContactsSvcChangeListenerManagerSingleton::Instance().getWatchIdAndInc();
                m_watchIdMap[id] = emitter->getId();
 
            event->setId(id);
@@ -732,7 +732,7 @@ void AddressBook::OnRequestReceived(const EventAddressBookRemoveChangeListenerPt
                {
                        LogDebug("No watcher is registered. unsubscribing from contact service.");
 
-                       ContactListenerManagerSingleton::Instance().unregisterAppListChangedCallbacks(this);
+                       ContactsSvcChangeListenerManagerSingleton::Instance().unregisterAppListChangedCallbacks(this);
                }
 
                event->setResult(true);
index 846d596..6be7e35 100755 (executable)
@@ -32,7 +32,7 @@
 #include <API/Contact/IAddressBook.h>
 #include <API/Contact/IContact.h>
 
-#include "ContactListenerManager.h"
+#include "ContactsSvcChangeListenerManager.h"
 
 namespace TizenApis {
 namespace Platform {
  *    limitations under the License.
  */
 /*
- * @file        ContactListenerManager.cpp
+ * @file        ContactsSvcChangeListenerManager.cpp
  * @author      Kisub Song (kisubs.song@samsung.com)
  * @version     0.1
  * @brief       
  */
 
-#include "ContactListenerManager.h"
+#include "ContactsSvcChangeListenerManager.h"
 
 #include <contacts-svc.h>
 
@@ -33,7 +33,7 @@
 #include "ContactObjectP2AConverter.h"
 #include "query-svc/query-service.h"
 
-IMPLEMENT_SINGLETON(TizenApis::Platform::Contact::ContactListenerManager)
+IMPLEMENT_SINGLETON(TizenApis::Platform::Contact::ContactsSvcChangeListenerManager)
 
 namespace TizenApis {
 namespace Platform {
@@ -43,14 +43,15 @@ using namespace std;
 using namespace WrtDeviceApis::Commons;
 using namespace TizenApis::Api::Contact;
 
-ContactListenerManager::ContactListenerManager() :
+ContactsSvcChangeListenerManager::ContactsSvcChangeListenerManager() :
+               EventRequestReceiver< EventInvokeChangeListener >(ThreadEnum::CONTACT_THREAD),
                m_callbackRegistered(false),
                m_latestVersion(0),
                m_watchIdAcc(0)
 {
 }
 
-ContactListenerManager::~ContactListenerManager()
+ContactsSvcChangeListenerManager::~ContactsSvcChangeListenerManager()
 {
        if(m_callbackRegistered)
        {
@@ -58,7 +59,7 @@ ContactListenerManager::~ContactListenerManager()
        }
 }
 
-void ContactListenerManager::registerAppListChangedCallbacks(IContactEventCallbacks *callbacks, int addressBookId)
+void ContactsSvcChangeListenerManager::registerAppListChangedCallbacks(IContactEventCallbacks *callbacks, int addressBookId)
 {
        if(callbacks == NULL)
        {
@@ -77,7 +78,7 @@ void ContactListenerManager::registerAppListChangedCallbacks(IContactEventCallba
        m_callbacks[addressBookId] = callbacks;
 }
 
-void ContactListenerManager::unregisterAppListChangedCallbacks(IContactEventCallbacks *callbacks)
+void ContactsSvcChangeListenerManager::unregisterAppListChangedCallbacks(IContactEventCallbacks *callbacks)
 {
        if(callbacks == NULL)
        {
@@ -112,7 +113,7 @@ void ContactListenerManager::unregisterAppListChangedCallbacks(IContactEventCall
        }
 }
 
-void ContactListenerManager::unregisterAppListChangedCallbacks(int addressBookId)
+void ContactsSvcChangeListenerManager::unregisterAppListChangedCallbacks(int addressBookId)
 {
        if(m_callbacks.size() == 0)
        {
@@ -135,24 +136,33 @@ void ContactListenerManager::unregisterAppListChangedCallbacks(int addressBookId
        }
 }
 
-long ContactListenerManager::getWatchIdAndInc()
+long ContactsSvcChangeListenerManager::getWatchIdAndInc()
 {
        return ++m_watchIdAcc;
 }
 
-void ContactListenerManager::contactsSvcEventCallback(void *data)
+void ContactsSvcChangeListenerManager::contactsSvcEventCallback(void *data)
 {
+       // This callback is to be called from main thread.
        if(data == NULL)
        {
                LogWarning("contacts-service listener passed NULL user_data");
                return;
        }
 
-       ContactListenerManager *contactListenerMgr = static_cast<ContactListenerManager *>(data);
+       ContactsSvcChangeListenerManager *contactListenerMgr = static_cast<ContactsSvcChangeListenerManager *>(data);
        contactListenerMgr->contactsSvcEventCallback();
 }
 
-void ContactListenerManager::contactsSvcEventCallback()
+void ContactsSvcChangeListenerManager::contactsSvcEventCallback()
+{
+       EventInvokeChangeListenerPtr event(new EventInvokeChangeListener());
+
+       event->setForAsynchronousCall(NULL);
+       EventRequestReceiver< EventInvokeChangeListener >::PostRequest(event);
+}
+
+void ContactsSvcChangeListenerManager::OnRequestReceived(const EventInvokeChangeListenerPtr &event)
 {
        LogDebug("entered");
        if(!m_callbackRegistered)
@@ -257,7 +267,7 @@ void ContactListenerManager::contactsSvcEventCallback()
        m_latestVersion = get_contact_version();
 }
 
-void ContactListenerManager::registerContactSvcChangedCallbacks()
+void ContactsSvcChangeListenerManager::registerContactSvcChangedCallbacks()
 {
        int errorCode = 0;
 
@@ -288,7 +298,7 @@ void ContactListenerManager::registerContactSvcChangedCallbacks()
        m_callbackRegistered = true;
 }
 
-void ContactListenerManager::unregisterContactSvcChangedCallbacks()
+void ContactsSvcChangeListenerManager::unregisterContactSvcChangedCallbacks()
 {
        int errorCode = 0;
 
@@ -319,7 +329,7 @@ void ContactListenerManager::unregisterContactSvcChangedCallbacks()
        m_callbackRegistered = false;
 }
 
-IContactEventCallbacks* ContactListenerManager::getContactEventCallbacks(int id)
+IContactEventCallbacks* ContactsSvcChangeListenerManager::getContactEventCallbacks(int id)
 {
        if(m_callbacks.find(id) == m_callbacks.end())
                return NULL;
@@ -14,7 +14,7 @@
  *    limitations under the License.
  */
 /*
- * @file        ContactListenerManager.h
+ * @file        ContactsSvcChangeListenerManager.h
  * @author      Kisub Song (kisubs.song@samsung.com)
  * @version     0.1
  * @brief       
@@ -28,6 +28,8 @@
 #include <set>
 #include <dpl/shared_ptr.h>
 #include <dpl/singleton.h>
+#include <Commons/EventReceiver.h>
+#include <Commons/IEvent.h>
 
 #include <API/Contact/IContact.h>
 
@@ -38,7 +40,7 @@ namespace Contact {
 class IContactEventCallbacks
 {
 public:
-    friend class ContactListenerManager;
+    friend class ContactsSvcChangeListenerManager;
 
     IContactEventCallbacks() {}
        ~IContactEventCallbacks() {}
@@ -49,11 +51,18 @@ protected:
        virtual void onContactEventRemoved(TizenApis::Api::Contact::StringArrayPtr &contactIds) = 0;
 };
 
-class ContactListenerManager
+class EventInvokeChangeListener :
+       public WrtDeviceApis::Commons::IEvent<EventInvokeChangeListener>
+{
+};
+typedef DPL::SharedPtr<EventInvokeChangeListener> EventInvokeChangeListenerPtr;
+
+class ContactsSvcChangeListenerManager :
+       public WrtDeviceApis::Commons::EventRequestReceiver< EventInvokeChangeListener >
 {
 public:
-       ContactListenerManager();
-       virtual ~ContactListenerManager();
+       ContactsSvcChangeListenerManager();
+       virtual ~ContactsSvcChangeListenerManager();
 
        // Can throw InvalidArgumentException or PlatformException
        void registerAppListChangedCallbacks(IContactEventCallbacks *callbacks, int addressBookId);
@@ -67,6 +76,7 @@ public:
 private:
        static void contactsSvcEventCallback(void *data);
        void contactsSvcEventCallback();
+       virtual void OnRequestReceived(const EventInvokeChangeListenerPtr &event);
 
        void registerContactSvcChangedCallbacks();
        void unregisterContactSvcChangedCallbacks();
@@ -83,10 +93,10 @@ private:
        long m_watchIdAcc;
 
 public:
-       friend class DPL::Singleton<ContactListenerManager>;
+       friend class DPL::Singleton<ContactsSvcChangeListenerManager>;
 };
 
-typedef DPL::Singleton<ContactListenerManager> ContactListenerManagerSingleton;
+typedef DPL::Singleton<ContactsSvcChangeListenerManager> ContactsSvcChangeListenerManagerSingleton;
 
 } // Contact
 } // Platform
index 5756ca1..d1dbcf2 100755 (executable)
@@ -26,8 +26,8 @@ set(SRCS_PLATFORM_IMPLEMENTATION_CONTACT
   ${CURRENT_PATH}/ContactObjectP2AConverter.cpp
   ${CURRENT_PATH}/ContactSearchEngine.cpp
   ${CURRENT_PATH}/ContactFilterValidator.cpp
+  ${CURRENT_PATH}/ContactsSvcChangeListenerManager.cpp
   ${CURRENT_PATH}/ContactsSvcWrapper.cpp
-  ${CURRENT_PATH}/ContactListenerManager.cpp
   ${CURRENT_PATH}/ContactUtility.cpp
   ${CURRENT_PATH}/ContactDownloadManager.cpp
   ${CURRENT_PATH}/query-svc/query-svc.c