#include <FBaseInteger.h>
#include <FBaseSysLog.h>
#include <FBaseColIEnumerator.h>
+#include <FBaseRtMutexGuard.h>
#include <FBase_StringConverter.h>
#include <FAppPkg_PackageManagerImpl.h>
using namespace std;
using namespace Tizen::Base;
using namespace Tizen::Base::Collection;
+using namespace Tizen::Base::Runtime;
using namespace Tizen::App::Package;
namespace Tizen { namespace App
, __pProviderList(null)
, __uniqueId(-1)
{
- __pDataControlRequestList = new (std::nothrow) HashMap(SingleObjectDeleter);
- SysTryReturnVoidResult(NID_APP, __pDataControlRequestList != null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] The memory is insufficient.");
- __pDataControlRequestList->Construct();
+}
+
+result
+_DataControlManager::Construct(void)
+{
+ unique_ptr< HashMap > pDataControlRequestList(new (std::nothrow) HashMap(SingleObjectDeleter));
+ SysTryReturnResult(NID_APP, pDataControlRequestList != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
+
+ result r = pDataControlRequestList->Construct();
+ SysTryReturnResult(NID_APP, !IsFailed(r), r, "Propagating to caller...");
- __pProviderList = new (std::nothrow) LinkedList(SingleObjectDeleter);
- SysTryReturnVoidResult(NID_APP, __pProviderList != null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] The memory is insufficient.");
+ unique_ptr< LinkedList > pProviderList(new (std::nothrow) LinkedList(SingleObjectDeleter));
+ SysTryReturnResult(NID_APP, pProviderList != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
+
+ r = __mutex.Create();
+ SysTryReturnResult(NID_APP, !IsFailed(r), r, "Mutex initialization failed.");
+
+ __pDataControlRequestList = pDataControlRequestList.release();
+ __pProviderList = pProviderList.release();
+
+ return E_SUCCESS;
}
_DataControlManager::~_DataControlManager(void)
_DataControlManager* pInst = new (std::nothrow) _DataControlManager();
SysTryReturnVoidResult(NID_APP, pInst != null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] The memory is insufficient.");
+ result r = pInst->Construct();
+ SysTryCatch(NID_IO, !IsFailed(r), , r, "[%s] Propagating to caller...", GetErrorMessage(r));
+
__pDataControlManagerInstance = pInst;
-
+
std::atexit(DestroySingleton);
return;
+
+CATCH:
+ delete pInst;
}
void
int
_DataControlManager::GetRequestCount(void) const
{
+ MutexGuard lock(__mutex);
+
return __pDataControlRequestList->GetCount();
}
_DataControlManager::AddRequestInfo(Integer* pReqId, _DataControlRequestInfo* pReqInfo)
{
//SysLog(NID_APP, "DataControl request list count: %d", __pDataControlRequestList->GetCount());
+ MutexGuard lock(__mutex);
+
return __pDataControlRequestList->Add(pReqId, pReqInfo);
}
{
result r = E_SUCCESS;
+ MutexGuard lock(__mutex);
+
Object* pObj = __pDataControlRequestList->GetValue(reqId);
SysTryReturn(NID_APP, pObj != null, null, GetLastResult(), "[%s] Propagating to caller...", GetErrorMessage(GetLastResult()));
void
_DataControlManager::RemoveRequestInfo(Integer& reqId)
{
+ MutexGuard lock(__mutex);
+
__pDataControlRequestList->Remove(reqId);
}
void
_DataControlManager::RemoveAllRequests(void)
{
+ MutexGuard lock(__mutex);
+
__pDataControlRequestList->RemoveAll();
}
while (pEnum->MoveNext() == E_SUCCESS)
{
Integer* pReqId = dynamic_cast< Integer* >(pEnum->GetCurrent());
- if (pReqId != null)
+ if (pReqId != null && pDcMgr != null)
{
pDcMgr->RemoveRequestInfo(*pReqId);
}
int req = -1;
_DataControlManager* pDcMgr = _DataControlManager::GetInstance();
+ SysTryReturnResult(NID_APP, pDcMgr != null, E_SYSTEM, "Getting _DataControlManager instance failed.");
// Check the request count of DataControl operation
int count = pDcMgr->GetRequestCount();
Integer key(reqId);
_DataControlManager* pDcMgr = static_cast< _DataControlManager* >(data);
+ SysTryReturnResult(NID_APP, pDcMgr != null, E_SYSTEM, "Getting _DataControlManager instance failed.");
+
_DataControlRequestInfo* pReqInfo = pDcMgr->GetRequestInfo(key);
if (pReqInfo == null)
{
tmpPath.Append(App::GetInstance()->GetAppId());
_DataControlManager* pDcMgr = _DataControlManager::GetInstance();
- SysTryCatch(NID_APP, pDcMgr, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] Failed to get _DataControlManager instance.");
+ SysTryCatch(NID_APP, pDcMgr != null, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] Getting _DataControlManager instance failed.");
uniqueId = pDcMgr->GetUniqueId();
tmpPath.Append(uniqueId);
tmpPath.Append(App::GetInstance()->GetAppId());
_DataControlManager* pDcMgr = _DataControlManager::GetInstance();
- SysTryCatch(NID_APP, pDcMgr, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] Failed to get _DataControlManager instance.");
+ SysTryCatch(NID_APP, pDcMgr != null, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] Getting _DataControlManager instance failed.");
uniqueId = pDcMgr->GetUniqueId();
tmpPath.Append(uniqueId);