fixed PLM issue. Assert occured when an application was closed using back key.
authorKyungwooNoh <kw1004.noh@samsung.com>
Thu, 17 Oct 2013 06:39:36 +0000 (15:39 +0900)
committerKyungwooNoh <kw1004.noh@samsung.com>
Fri, 18 Oct 2013 04:36:51 +0000 (13:36 +0900)
Change-Id: I8eacf19f7b3c5aa2fdf86e95b674738864ba9f5e
Signed-off-by: KyungwooNoh <kw1004.noh@samsung.com>
src/base/runtime/FBaseRt_Event.cpp
src/base/runtime/FBaseRt_EventManager.cpp
src/base/runtime/FBaseRt_EventManager.h

index 5d6c58c..cb5f227 100755 (executable)
@@ -156,7 +156,7 @@ _Event::AddListener(const IEventListener& listener, bool calledByCallerThread)
        SysTryReturnResult(NID_BASE_RT, !exist, E_OBJ_ALREADY_EXIST, "[E_OBJ_ALREADY_EXIST] Listener already exist.");
 
        listenerInfo.pListener = &listener;
-       listenerInfo.listener = _EventManager::GetEventListenerObjectManager().Register(listener);
+       listenerInfo.listener = _EventManager::GetEventListenerObjectManager()->Register(listener);
        listenerInfo.eventManager = eventManager;
 
        r = __listeners.Add(listenerInfo);
@@ -184,7 +184,7 @@ _Event::RemoveListener(const IEventListener& listener)
                        r = __listeners.Remove(listenerInfo);
                        SysTryLog(NID_BASE_RT, !IsFailed(r), "[%s] Propagating.", GetErrorMessage(r));
 
-                       _EventManager::GetEventListenerObjectManager().Unregister(listenerInfo.listener);
+                       _EventManager::GetEventListenerObjectManager()->Unregister(listenerInfo.listener);
 
                        exist = true;
                        break;
@@ -290,7 +290,7 @@ _Event::ProcessListeners(std::tr1::shared_ptr< IEventArg > arg)
                        }
                }
 
-               pEventListener = _EventManager::GetEventListenerObjectManager().GetObject(listenerInfo.listener);
+               pEventListener = _EventManager::GetEventListenerObjectManager()->GetObject(listenerInfo.listener);
                if (pEventListener != null)
                {
                        FireImpl(*pEventListener, *arg);
index 4713ce3..92f3b9e 100644 (file)
@@ -40,6 +40,8 @@ using namespace Tizen::Base::Runtime;
 
 namespace Tizen { namespace Base { namespace Runtime
 {
+__thread _ObjectManagerT< IEventListener >* pObjectManager = null;
+
 bool
 _EventManager::_EventMessage::operator ==(const _EventMessage& rhs) const
 {
@@ -269,7 +271,7 @@ _EventManager::OnEventReceived(GIOChannel* pGIOChannel, GIOCondition condition,
                                }
                                else
                                {
-                                       pEventListener = GetEventListenerObjectManager().GetObject(message.listener);
+                                       pEventListener = GetEventListenerObjectManager()->GetObject(message.listener);
                                        if (pEventListener != null)
                                        {
                                                pEvent->FireImpl(*pEventListener, *message.arg);
@@ -408,12 +410,13 @@ _EventManager::GetEventObjectManager(void)
        return objectManager;
 }
 
-_ObjectManagerT< IEventListener >&
+_ObjectManagerT< IEventListener >*
 _EventManager::GetEventListenerObjectManager(void)
 {
-       static _ObjectManagerT< IEventListener > objectManager;
+       if(pObjectManager == null)
+               pObjectManager = new _ObjectManagerT< IEventListener >;
 
-       return objectManager;
+       return pObjectManager;
 }
 
 } } } // Tizen::Base::Runtime
index 7aba053..0080edc 100644 (file)
@@ -186,7 +186,7 @@ public:
         *
         * @since 2.0
         */
-       static _ObjectManagerT< IEventListener >& GetEventListenerObjectManager(void);
+       static _ObjectManagerT< IEventListener >* GetEventListenerObjectManager(void);
 
 private:
        _EventManager(const _EventManager& rhs);