Modify DataControl manager for thread-safe
[platform/framework/native/appfw.git] / src / app / FApp_AppInfo.cpp
old mode 100755 (executable)
new mode 100644 (file)
index e74a86b..bb8d05a
@@ -37,6 +37,7 @@
 #include <FBase_StringConverter.h>
 
 #include "FAppPkg_PackageInfoImpl.h"
+#include "FApp_Aul.h"
 #include "FApp_AppInfo.h"
 
 using namespace Tizen::App::Package;
@@ -99,6 +100,7 @@ _AppInfo::_AppInfo(void)
        : __appState(TERMINATED)
        , __appType(_APP_TYPE_NONE)
        , __appRootDirFd(-1)
+       , __appSdDirFd(-1)
        , __appHandlerType(_APP_HANDLER_NONE)
        , __parentWindowHandle(-1)
        , __pAppName(null)
@@ -120,6 +122,7 @@ _AppInfo::~_AppInfo(void)
 
        // closing may or may not succeed
        close(__appRootDirFd);
+       close(__appSdDirFd);
 }
 
 _AppInfo*
@@ -141,17 +144,21 @@ _AppInfo::Construct(void)
        const char* pPackageId = appinfo_get_packageid();
        const char* pExecName = appinfo_get_execname();
 
-
        if (strncmp(pExecName, SUBMODE_NAME, strlen(SUBMODE_NAME)) == 0)
        {
                SysLog(NID_APP, "Handling for submode.");
-               const String& name = _PackageManagerImpl::GetInstance()->GetDefaultAppExecutableName(String(pPackageId));
-
-               __isSubMode = true;
 
-               std::unique_ptr<char[]> pActualExec(_StringConverter::CopyToCharArrayN(name));
-               appinfo_update_submode_execname_and_appid(pActualExec.get());
-               SysLog(NID_APP, "Executable name is changed to %s.", pActualExec.get());
+               const char* pAppId = appinfo_get_appid();
+               const String& mainId = _Aul::GetMainAppId(pAppId);
+               if (!mainId.IsEmpty())
+               {
+                       std::unique_ptr<char[]> pMainId(_StringConverter::CopyToCharArrayN(mainId));
+                       appinfo_update_submode_appid(pMainId.get());
+               
+                       __isSubMode = true;
+               
+                       SysLog(NID_APP, "Executable name is changed to %s.", pMainId.get());
+               }
        }
 
        result r = E_SUCCESS;
@@ -182,8 +189,8 @@ _AppInfo::Construct(void)
                strncpy(sdInfoPath, "/opt/storage/sdcard/app2sd/", strlen("/opt/storage/sdcard/app2sd/"));
                strncat(sdInfoPath, pPackageId, MAX_APPID);
 
-               int sdFd = open(sdInfoPath, O_RDONLY);
-               SysLog(NID_APP, "sd root directory (%s:%d) open.", sdInfoPath, sdFd);
+               __appSdDirFd = open(sdInfoPath, O_RDONLY);
+               SysLog(NID_APP, "sd root directory (%s:%d) open.", sdInfoPath, __appSdDirFd);
 
                char apiVersion[MAX_APIVERSION] = {0, };
                char* pRet = fgets(apiVersion, MAX_APIVERSION - 1, pFile);
@@ -277,7 +284,12 @@ _AppInfo::UpdateAppInfoFromPackageInfo(const PackageId& packageId)
 
        result r = E_SUCCESS;
        std::unique_ptr<PackageInfo> pInfo(pPkg->GetPackageInfoN(packageId));
-       SysTryReturn(NID_APP, pInfo != null, r, r, "[%s] Propagating.", GetErrorMessage(r));
+       if (pInfo.get() == null)
+       {
+               r = GetLastResult();
+               SysPropagate(NID_APP, r);
+               return r;
+       }
 
        const _PackageInfoImpl* pPkgInfo = _PackageInfoImpl::GetInstance(pInfo.get());
        SysTryReturnResult(NID_APP, pPkgInfo != null, E_INVALID_STATE, "Invalid PackageInfo instance.");