{
__launchManager.RemoveItem(req);
}
-int
-_AppControlManager::GetLaunchRequestCount(void)
-{
- return __launchManager.GetCount();
-}
result
_AppControlManager::RegisterRequest(service_s* service, int& req, _AppHandler& handler)
return __pDataControlManagerInstance;
}
+int
+_DataControlManager::GetRequestCount(void) const
+{
+ return __pDataControlRequestList->GetCount();
+}
+
result
_DataControlManager::AddRequestInfo(Integer* pReqId, _DataControlRequestInfo* pReqInfo)
{
__pDataControlRequestList->Remove(reqId);
}
+void
+_DataControlManager::RemoveAllRequests(void)
+{
+ __pDataControlRequestList->RemoveAll();
+}
+
int
_DataControlManager::GetUniqueId(void)
{
_DataControlRequestInfo* GetRequestInfo(Tizen::Base::Integer& reqId);
+ int GetRequestCount(void) const;
+
void RemoveRequestInfo(Tizen::Base::Integer& reqId);
+ void RemoveAllRequests(void);
+
int GetUniqueId(void);
private:
*/
#include <typeinfo>
-#include <new>
#include <unique_ptr.h>
#include <appsvc/appsvc.h>
{
static const int MAX_REQUEST_COUNT = 128;
+static const int REQUEST_THRESHOLD = 100;
static const int _MAX_ARGUMENT_SIZE = 16384; // 16KB
class _MapDataControlEventArg
// private
_MapDataControlImpl::_MapDataControlImpl(void)
- : __appId(L"")
- , __providerId(L"")
- , __access(_DATACONTROL_ACCESS_UNDEFINED)
+ : __access(_DATACONTROL_ACCESS_UNDEFINED)
, __pPreviousListener(null)
, __pMapDataControlEvent(null)
{
result r = E_SUCCESS;
int req = -1;
- _AppControlManager* pAppManagerImpl = _AppControlManager::GetInstance();
+ _DataControlManager* pDcMgr = _DataControlManager::GetInstance();
// Check the request count of DataControl operation
- int count = pAppManagerImpl->GetLaunchRequestCount();
+ int count = pDcMgr->GetRequestCount();
SysLog(NID_APP, "Current launch request count: %d", count);
+ if (count > REQUEST_THRESHOLD)
+ {
+ _AppManagerImpl* pImpl = _AppManagerImpl::GetInstance();
+
+ // Clear the request queue if the provider is terminated
+ if (!pImpl->IsRunning(__appId))
+ {
+ SysLog(NID_APP, "The request queue is cleared due to the invalid provider.");
+
+ pDcMgr->RemoveAllRequests();
+ }
+ }
+
SysTryReturnResult(NID_APP, count < MAX_REQUEST_COUNT, E_MAX_EXCEEDED, "The number of requests has exceeded the maximum limit.");
_AppArg* pArg = new(std::nothrow) _AppArg; // XXX: pArg will be released in _AppManagerImpl::LaunchApp().
pArg->Construct(*this, static_cast <_DataControlRequestType>(type), pDataList);
+ _AppControlManager* pAppManagerImpl = _AppControlManager::GetInstance();
+
if (__pMapDataControlEvent)
{
// reqId is system-wide id because the bundle is system-wide.
_DataControlManager* pDcMgr = static_cast< _DataControlManager* >(data);
_DataControlRequestInfo* pReqInfo = pDcMgr->GetRequestInfo(key);
- SysTryCatch(NID_APP, pReqInfo != null, r = E_SYSTEM, E_SYSTEM,
- "[E_SYSTEM] Failed to get request info");
+ if (pReqInfo == null)
+ {
+ SysLog(NID_APP, "No request info of reqId %d", reqId);
+ return E_SUCCESS;
+ }
_MapDataControlEvent* pMapDataControlEvent = dynamic_cast< _MapDataControlEvent* >(pReqInfo->GetEvent());
SysTryCatch(NID_APP, pMapDataControlEvent != null, r = E_SYSTEM, E_SYSTEM,
"[E_SYSTEM] invalid request info");
+ // Remove the request from the queue
+ SysLog(NID_APP, "Remove the request, req: %d", reqId);
+
pDcMgr->RemoveRequestInfo(key);
if (pMapDataControlEvent != null && typeid(pMapDataControlEvent) == typeid(_MapDataControlEvent*))
SysTryCatch(NID_APP, p, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] invalid bundle");
launchReqId = atoi(p);
- // Remove the request count
- SysLog(NID_APP, "Remove a launch request: req: %d", launchReqId);
- _AppControlManager::GetInstance()->RemoveLaunchRequest(launchReqId);
-
return E_SUCCESS;
CATCH:
#include <FBaseString.h>
#include <FBaseRtEvent.h>
-#include "FApp_AppControlManager.h"
+#include "FApp_AppManagerImpl.h"
namespace Tizen { namespace Base
{
*/
#include <typeinfo>
-#include <new>
#include <unique_ptr.h>
#include <appsvc/appsvc.h>
{
static const int MAX_REQUEST_COUNT = 128;
+static const int REQUEST_THRESHOLD = 100;
static const int _MAX_ARGUMENT_SIZE = 16384; // 16KB
static const int _MAX_REQUEST_ARGUMENT_SIZE = 1048576; // 1MB
static const char* _DATACONTROL_REQUEST_DIR = "/tmp/osp/DataControlRequest/\0";
// private
_SqlDataControlImpl::_SqlDataControlImpl(void)
- : __appId(L"")
- , __providerId(L"")
- , __access(_DATACONTROL_ACCESS_UNDEFINED)
+ : __access(_DATACONTROL_ACCESS_UNDEFINED)
, __pPreviousListener(null)
, __pSqlDataControlEvent(null)
{
result r = E_SUCCESS;
int req = -1;
- _AppControlManager* pAppManagerImpl = _AppControlManager::GetInstance();
+ _DataControlManager* pDcMgr = _DataControlManager::GetInstance();
// Check the request count of DataControl operation
- int count = pAppManagerImpl->GetLaunchRequestCount();
+ int count = pDcMgr->GetRequestCount();
SysLog(NID_APP, "Current launch request count: %d", count);
+ if (count > REQUEST_THRESHOLD)
+ {
+ _AppManagerImpl* pImpl = _AppManagerImpl::GetInstance();
+
+ // Clear the request queue if the provider is terminated
+ if (!pImpl->IsRunning(__appId))
+ {
+ SysLog(NID_APP, "The request queue is cleared due to the invalid provider.");
+
+ pDcMgr->RemoveAllRequests();
+ }
+ }
+
SysTryReturnResult(NID_APP, count < MAX_REQUEST_COUNT, E_MAX_EXCEEDED, "The number of requests has exceeded the maximum limit.");
_AppArg* pArg = new (std::nothrow) _AppArg; // XXX: pArg will be released in _AppManagerImpl::LaunchApp().
pArg->Construct(*this, static_cast <_DataControlRequestType>(type), pDataList);
+ _AppControlManager* pAppManagerImpl = _AppControlManager::GetInstance();
+
if (__pSqlDataControlEvent)
{
// reqId is system-wide id because the bundle is system-wide.
_AppControlManager::_RequestGuard reqObj = _AppControlManager::_RequestGuard(*pAppManagerImpl, pArg, SqlDataControlCallback, __pSqlDataControlEvent, -1);
req = reqObj.GetRequestNumber();
#else
- _DataControlManager* pDcMgr = _DataControlManager::GetInstance();
_AppControlManager::_RequestGuard reqObj = _AppControlManager::_RequestGuard(*pAppManagerImpl, pArg, SqlDataControlCallback, pDcMgr, -1);
req = reqObj.GetRequestNumber();
#endif
_DataControlManager* pDcMgr = static_cast< _DataControlManager* >(data);
_DataControlRequestInfo* pReqInfo = pDcMgr->GetRequestInfo(key);
- SysTryCatch(NID_APP, pReqInfo != null, r = E_SYSTEM, E_SYSTEM,
- "[E_SYSTEM] Failed to get request info");
+ if (pReqInfo == null)
+ {
+ SysLog(NID_APP, "No request info of reqId %d", reqId);
+ return E_SUCCESS;
+ }
_SqlDataControlEvent* pSqlDataControlEvent = dynamic_cast< _SqlDataControlEvent* >(pReqInfo->GetEvent());
SysTryCatch(NID_APP, pSqlDataControlEvent != null, r = E_SYSTEM, E_SYSTEM,
"[E_SYSTEM] invalid request info");
+ // Remove the request from the queue
+ SysLog(NID_APP, "Remove the request, req: %d", reqId);
+
pDcMgr->RemoveRequestInfo(key);
if (pSqlDataControlEvent != null && typeid(pSqlDataControlEvent) == typeid(_SqlDataControlEvent*))
SysTryCatch(NID_APP, p, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] invalid bundle");
launchReqId = atoi(p);
- // Remove the request count
- SysLog(NID_APP, "Remove a launch request: req: %d", launchReqId);
- _AppControlManager::GetInstance()->RemoveLaunchRequest(launchReqId);
-
return E_SUCCESS;
CATCH:
void RemoveLaunchRequest(int req);
- int GetLaunchRequestCount(void);
virtual void OnAppControlResponseEventReceivedN(const Tizen::Base::Runtime::IEventArg* arg);
static AppCtrlResult ConvertAppControlResultCode(int res);
return (r == E_SUCCESS) ? pItem : null;
}
- int GetCount(void) const
- {
- return __requestList.GetCount();
- }
-
private:
_RequestManagerT(const T& rhs);