Flow control for DataControl
authorSunwook Bae <sunwook45.bae@samsung.com>
Wed, 3 Apr 2013 10:46:15 +0000 (19:46 +0900)
committerSunwook Bae <sunwook45.bae@samsung.com>
Wed, 3 Apr 2013 10:47:14 +0000 (19:47 +0900)
Change-Id: I5fa374f7d5d53038809dec9d9af44abce6ef4bda
Signed-off-by: Sunwook Bae <sunwook45.bae@samsung.com>
inc/FAppMapDataControl.h
inc/FAppSqlDataControl.h
src/app/FApp_MapDataControlImpl.cpp
src/app/FApp_SqlDataControlImpl.cpp

index b44f55f..a840b03 100755 (executable)
@@ -93,7 +93,9 @@ public:
        * @exception    E_ILLEGAL_ACCESS        Either of the following conditions has occurred: @n
        *                                                                       - Access is denied due to insufficient permission.
        *                                                                       - The application using this method is not signed with the same certificate of provider application. @b Since: @b 2.1
-       * @exception    E_MAX_EXCEEDED          The size of sending buffer has exceeded the maximum limit.
+       * @exception    E_MAX_EXCEEDED          Either of the following conditions has occurred: @n
+       *                                                                       - The size of sending buffer has exceeded the maximum limit.
+       *                                                                       - The number of sending requests has exceeded the maximum limit.
        * @exception    E_SYSTEM                        A system error has occurred.
        * @remarks              The recommended data size is under 16KB because severe system performance degradation may occur for large messages. E_MAX_EXCEEDED may be returned for messages over 16KB size.
        */
@@ -120,7 +122,9 @@ public:
        * @exception    E_ILLEGAL_ACCESS        Either of the following conditions has occurred: @n
        *                                                                       - Access is denied due to insufficient permission.
        *                                                                       - The application using this method is not signed with the same certificate of provider application. @b Since: @b 2.1
-       * @exception    E_MAX_EXCEEDED          The size of sending buffer has exceeded the maximum limit.
+       * @exception    E_MAX_EXCEEDED          Either of the following conditions has occurred: @n
+       *                                                                       - The size of sending buffer has exceeded the maximum limit.
+       *                                                                       - The number of sending requests has exceeded the maximum limit.
        * @exception    E_SYSTEM                        A system error has occurred.
        * @remarks              The recommended data size is under 16KB because severe system performance degradation may occur for large messages. E_MAX_EXCEEDED may be returned for messages over 16KB size.
        */
@@ -149,7 +153,9 @@ public:
        * @exception    E_ILLEGAL_ACCESS        Either of the following conditions has occurred: @n
        *                                                                       - Access is denied due to insufficient permission.
        *                                                                       - The application using this method is not signed with the same certificate of provider application. @b Since: @b 2.1
-       * @exception    E_MAX_EXCEEDED          The size of sending buffer has exceeded the maximum limit.
+       * @exception    E_MAX_EXCEEDED          Either of the following conditions has occurred: @n
+       *                                                                       - The size of sending buffer has exceeded the maximum limit.
+       *                                                                       - The number of sending requests has exceeded the maximum limit.
        * @exception    E_SYSTEM                        A system error has occurred.
        * @remarks              The recommended data size is under 16KB because severe system performance degradation may occur for large messages. E_MAX_EXCEEDED may be returned for messages over 16KB size.
        */
@@ -176,7 +182,9 @@ public:
        * @exception    E_ILLEGAL_ACCESS        Either of the following conditions has occurred: @n
        *                                                                       - Access is denied due to insufficient permission.
        *                                                                       - The application using this method is not signed with the same certificate of provider application. @b Since: @b 2.1
-       * @exception    E_MAX_EXCEEDED          The size of sending buffer has exceeded the maximum limit.
+       * @exception    E_MAX_EXCEEDED          Either of the following conditions has occurred: @n
+       *                                                                       - The size of sending buffer has exceeded the maximum limit.
+       *                                                                       - The number of sending requests has exceeded the maximum limit.
        * @exception    E_SYSTEM                        A system error has occurred.
        * @remarks              The recommended data size is under 16KB because severe system performance degradation may occur for large messages. E_MAX_EXCEEDED may be returned for messages over 16KB size.
        */
index fbc4a61..9c3d38e 100755 (executable)
@@ -108,7 +108,9 @@ public:
        * @exception    E_ILLEGAL_ACCESS        Either of the following conditions has occurred: @n
        *                                                                       - Access is denied due to insufficient permission.
        *                                                                       - The application using this method is not signed with the same certificate of provider application. @b Since: @b 2.1
-       * @exception    E_MAX_EXCEEDED          The size of sending buffer has exceeded the maximum limit.
+       * @exception    E_MAX_EXCEEDED          Either of the following conditions has occurred: @n
+       *                                                                       - The size of sending buffer has exceeded the maximum limit.
+       *                                                                       - The number of sending requests has exceeded the maximum limit.
        * @exception    E_SYSTEM                        A system error has occurred.
        * @remarks              If the value specified in the @c pWhere is string, the value must be wrapped in
        *                               single quotes. Otherwise it is not needed to wrap the numeric value in single quotes.
@@ -142,7 +144,9 @@ public:
        * @exception    E_ILLEGAL_ACCESS        Either of the following conditions has occurred: @n
        *                                                                       - Access is denied due to insufficient permission.
        *                                                                       - The application using this method is not signed with the same certificate of provider application. @b Since: @b 2.1
-       * @exception    E_MAX_EXCEEDED          The size of sending buffer has exceeded the maximum limit.
+       * @exception    E_MAX_EXCEEDED          Either of the following conditions has occurred: @n
+       *                                                                       - The size of sending buffer has exceeded the maximum limit.
+       *                                                                       - The number of sending requests has exceeded the maximum limit.
        * @exception    E_SYSTEM                        A system error has occurred.
        * @remarks              If the value specified in the @c insertMap is string, the value must be wrapped in
        *                               single quotes. Otherwise it is not needed to wrap the numeric value in single quotes.
@@ -177,7 +181,9 @@ public:
        * @exception    E_ILLEGAL_ACCESS        Either of the following conditions has occurred: @n
        *                                                                       - Access is denied due to insufficient permission.
        *                                                                       - The application using this method is not signed with the same certificate of provider application. @b Since: @b 2.1
-       * @exception    E_MAX_EXCEEDED          The size of sending buffer has exceeded the maximum limit.
+       * @exception    E_MAX_EXCEEDED          Either of the following conditions has occurred: @n
+       *                                                                       - The size of sending buffer has exceeded the maximum limit.
+       *                                                                       - The number of sending requests has exceeded the maximum limit.
        * @exception    E_SYSTEM                        A system error has occurred.
        * @remarks              If the value specified in the @c pWhere or @c updateMap is string, the value must be wrapped in
        *                               single quotes. Otherwise it is not needed to wrap the numeric value in single quotes.
@@ -211,7 +217,9 @@ public:
        * @exception    E_ILLEGAL_ACCESS        Either of the following conditions has occurred: @n
        *                                                                       - Access is denied due to insufficient permission.
        *                                                                       - The application using this method is not signed with the same certificate of provider application. @b Since: @b 2.1
-       * @exception    E_MAX_EXCEEDED          The size of sending buffer has exceeded the maximum limit.
+       * @exception    E_MAX_EXCEEDED          Either of the following conditions has occurred: @n
+       *                                                                       - The size of sending buffer has exceeded the maximum limit.
+       *                                                                       - The number of sending requests has exceeded the maximum limit.
        * @exception    E_SYSTEM                        A system error has occurred.
        * @remarks              If the value specified in the @c pWhere is string, the value must be wrapped in
        *                               single quotes. Otherwise it is not needed to wrap the numeric value in single quotes.
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:
index 9063306..6dce4b6 100644 (file)
@@ -38,6 +38,7 @@
 #include <FAppISqlDataControlResponseListener.h>
 
 #include <FBaseSysLog.h>
+
 #include <FIo_DataControlResultSetEnumerator.h>
 
 #include "FApp_AppControlManager.h"
@@ -55,6 +56,8 @@ using namespace Tizen::Io;
 namespace Tizen { namespace App
 {
 
+static const int MAX_REQUEST_COUNT = 128;
+
 class _SqlDataControlEventArg
        : public IEventArg
 {
@@ -160,14 +163,20 @@ _SqlDataControlImpl::StartSqlDataControl(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, "insufficient memory");
 
        pArg->Construct(*this, static_cast <_DataControlRequestType>(type), pDataList);
 
-       _AppControlManager* pAppManagerImpl = _AppControlManager::GetInstance();
-       int req = -1;
-
        if (__pSqlDataControlEvent)
        {
                // reqId is system-wide id because the bundle is system-wide.
@@ -447,6 +456,10 @@ _SqlDataControlImpl::SqlDataControlCallback(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: