From adf98e029e8fb6025843bf894eaf37e18f8d065e Mon Sep 17 00:00:00 2001 From: Young Ik Cho Date: Fri, 27 Sep 2013 16:02:59 +0900 Subject: [PATCH] Fix AppControl::Stop() without listener Change-Id: I5c7b9c237acc29628597ab8df096e26e3588f856 Signed-off-by: Young Ik Cho --- src/app/FApp_AppControlImpl.cpp | 57 ++++++++++++++++++++++----------------- src/app/inc/FApp_AppControlImpl.h | 4 +++ 2 files changed, 36 insertions(+), 25 deletions(-) diff --git a/src/app/FApp_AppControlImpl.cpp b/src/app/FApp_AppControlImpl.cpp index d3a1953..376b58e 100644 --- a/src/app/FApp_AppControlImpl.cpp +++ b/src/app/FApp_AppControlImpl.cpp @@ -33,7 +33,6 @@ #include #include -#include #include #include "FApp_AppControlImpl.h" @@ -622,10 +621,7 @@ _AppControlImpl::StartNative(const IList* pDataList, IAppControlEventListener* p pLib = new (std::nothrow) _LibraryImpl; SysTryReturnResult(NID_APP, pLib != null, E_OUT_OF_MEMORY, "Failed to allocate libraryimpl."); - unsigned long option = _LIBRARY_LOAD_OPTION_LAZY; - option |= _LIBRARY_LOAD_OPTION_NODELETE; - - result r = pLib->Construct(_path, option); + result r = pLib->Construct(_path, _LIBRARY_OPTION); SysTryCatch(NID_APP, !IsFailed(r), , r, "[%s] Propagating.", GetErrorMessage(r)); if (pListener) @@ -654,7 +650,7 @@ _AppControlImpl::StartNative(const IList* pDataList, IAppControlEventListener* p _reqId = req; - SysLog(NID_APP, "Exit"); + SysLog(NID_APP, "Exit %d", req); return E_SUCCESS; CATCH: @@ -686,10 +682,7 @@ _AppControlImpl::StartNative(const String* pUriData, const String* pMimeType, co pLib = new (std::nothrow) _LibraryImpl; SysTryReturnResult(NID_APP, pLib != null, E_OUT_OF_MEMORY, "Failed to allocate libraryimpl."); - unsigned long option = _LIBRARY_LOAD_OPTION_LAZY; - option |= _LIBRARY_LOAD_OPTION_NODELETE; - - result r = pLib->Construct(_path, option); + result r = pLib->Construct(_path, _LIBRARY_OPTION); SysTryCatch(NID_APP, !IsFailed(r), , r, "[%s] Propagating.", GetErrorMessage(r)); @@ -741,7 +734,7 @@ _AppControlImpl::StartNative(const String* pUriData, const String* pMimeType, co } _reqId = req; - SysLog(NID_APP, "Exit"); + SysLog(NID_APP, "Exit %d", req); return E_SUCCESS; @@ -848,21 +841,35 @@ _AppControlImpl::Stop(void) SysTryReturnResult(NID_APP, IsValidAppControl(appcontrolID), E_INVALID_OPERATION, "Invalid appcontrolID(%ls)", appcontrolID.GetPointer()); if (_property & _APPCONTROL_PROPERTY_SLP) - { - SysTryReturnResult(NID_APP, _reqId != _REQ_ID_INVALID, E_INVALID_OPERATION, "Invalid request ID ."); - - _InProcessInfo* pInfo = _AppControlManager::GetInstance()->__inAppManager.FindItem(_reqId); - SysTryReturnResult(NID_APP, pInfo != null, E_INVALID_OPERATION, "Request ID %d is not found.", _reqId); - + { result (*pStop)(int req) = null; - pStop = reinterpret_cast(pInfo->pLib->GetProcAddress(L"TerminateAppControl")); - SysTryReturnResult(NID_APP, pStop != null, E_SYSTEM, "No TerminateAppControl() function."); - - (*pStop)(_reqId); - - _AppControlManager::GetInstance()->__inAppManager.RemoveItem(_reqId); - - _reqId = _REQ_ID_INVALID; + + if (_reqId != _REQ_ID_INVALID) + { + _InProcessInfo* pInfo = _AppControlManager::GetInstance()->__inAppManager.FindItem(_reqId); + SysTryReturnResult(NID_APP, pInfo != null, E_INVALID_OPERATION, "Request ID %d is not found.", _reqId); + + pStop = reinterpret_cast(pInfo->pLib->GetProcAddress(L"TerminateAppControl")); + SysTryReturnResult(NID_APP, pStop != null, E_SYSTEM, "No TerminateAppControl() function."); + + (*pStop)(_reqId); + + _AppControlManager::GetInstance()->__inAppManager.RemoveItem(_reqId); + + _reqId = _REQ_ID_INVALID; + } + else + { + _LibraryImpl lib; + result r = lib.Construct(_path, _LIBRARY_OPTION); + if (r == E_SUCCESS) + { + pStop = reinterpret_cast(lib.GetProcAddress(L"TerminateAppControl")); + SysTryReturnResult(NID_APP, pStop != null, E_SYSTEM, "No TerminateAppControl() function."); + + (*pStop)(_reqId); + } + } } else if (_property & _APPCONTROL_PROPERTY_OSP) { diff --git a/src/app/inc/FApp_AppControlImpl.h b/src/app/inc/FApp_AppControlImpl.h index 2094d8b..abee74d 100644 --- a/src/app/inc/FApp_AppControlImpl.h +++ b/src/app/inc/FApp_AppControlImpl.h @@ -30,6 +30,8 @@ #include #include +#include + #include "FApp_AppManagerImpl.h" #include "FApp_IAppControlResponseEventListener.h" @@ -274,6 +276,8 @@ private: static result AppControlCb(void* data, _AppArg* pArg, _AppArg* pResArg, service_result_e res, int prop, int reqId); protected: + static const unsigned long _LIBRARY_OPTION = Tizen::Base::Runtime::_LIBRARY_LOAD_OPTION_LAZY | Tizen::Base::Runtime::_LIBRARY_LOAD_OPTION_NODELETE; + const AppControl& _appControl; Tizen::Base::String _path; -- 2.7.4