Flow control for DataControl
[platform/framework/native/appfw.git] / src / app / FApp_MapDataControlImpl.cpp
index 1b86d02..0cf7b3c 100644 (file)
@@ -49,6 +49,8 @@ using namespace Tizen::Io;
 namespace Tizen { namespace App
 {
 
+static const int MAX_REQUEST_COUNT = 128;
+
 class _MapDataControlEventArg
        : public IEventArg
 {
@@ -156,14 +158,20 @@ _MapDataControlImpl::StartMapDataControl(int type, const IList* pDataList, int*
 {
        result r = E_SUCCESS;
 
+       int req = -1;
+       _AppControlManager* pAppManagerImpl = _AppControlManager::GetInstance();
+
+       // Check the request count of DataControl operation
+       int count = pAppManagerImpl->GetLaunchRequestCount();
+       SysLog(NID_APP, "Current launch request count: %d", count);
+
+       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().
        SysTryReturnResult(NID_APP, pArg != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
 
        pArg->Construct(*this, static_cast <_DataControlRequestType>(type), pDataList);
 
-       _AppControlManager* pAppManagerImpl = _AppControlManager::GetInstance();
-       int req = -1;
-
        if (__pMapDataControlEvent)
        {
                // reqId is system-wide id because the bundle is system-wide.
@@ -399,6 +407,10 @@ _MapDataControlImpl::MapDataControlCallback(void* data, _AppArg* pArg, _AppArg*
                }
        }
 
+       // Remove the request count
+       SysLog(NID_APP, "Remove a launch request: reqId: %d", reqId);
+       _AppControlManager::GetInstance()->RemoveLaunchRequest(reqId);
+
        return E_SUCCESS;
 
 CATCH: