fix memory leak(merged from tizen_2.2)
authorjungmin76.park <jungmin76.park@samsung.com>
Mon, 1 Jul 2013 07:06:05 +0000 (16:06 +0900)
committerjungmin76.park <jungmin76.park@samsung.com>
Wed, 3 Jul 2013 04:53:44 +0000 (13:53 +0900)
Change-Id: Ic1867911852f8c07ebdaae08ecfd6ad226ad71bf
Signed-off-by: jungmin76.park <jungmin76.park@samsung.com>
src/app/FApp_ServiceAppImpl.cpp

index 9dcafdd..d4011cd 100644 (file)
@@ -25,6 +25,7 @@
 #include <FAppAppRegistry.h>
 #include <FBaseErrors.h>
 #include <FBaseSysLog.h>
+#include <FAppPkgPackageInfo.h>
 
 #include <FBaseRt_LibraryImpl.h>
 
@@ -372,21 +373,26 @@ _ServiceAppImpl::ResetLifeDurationTimer(void)
 int
 _ServiceAppImpl::GetPrivilegeLevel(void)
 {
-       const AppId appId = _AppInfo::GetApplicationId();
+       static int visibility = _API_VISIBILITY_NONE;
+       if( visibility == _API_VISIBILITY_NONE)
+       {
+               const AppId appId = _AppInfo::GetApplicationId();
 
-       _PackageManagerImpl* pPkg = _PackageManagerImpl::GetInstance();
-       SysTryReturn(NID_APP, pPkg != null, _API_VISIBILITY_PUBLIC, E_INVALID_STATE, "Invalid PackageManager instance.");
+               _PackageManagerImpl* pPkg = _PackageManagerImpl::GetInstance();
+               SysTryReturn(NID_APP, pPkg != null, _API_VISIBILITY_PUBLIC, E_INVALID_STATE, "Invalid PackageManager instance.");
 
-       String pkgId = _PackageManagerImpl::GetPackageIdByAppId(appId);
-       SysTryReturn(NID_APP, !pkgId.IsEmpty(), _API_VISIBILITY_PUBLIC, E_INVALID_STATE, "Invalid appId(%ls).", appId.GetPointer() );
+               String pkgId = _PackageManagerImpl::GetPackageIdByAppId(appId);
+               SysTryReturn(NID_APP, !pkgId.IsEmpty(), _API_VISIBILITY_PUBLIC, E_INVALID_STATE, "Invalid appId(%ls).", appId.GetPointer() );
 
-       PackageInfo* pInfo = pPkg->GetPackageInfoN(pkgId);
-       SysTryReturn(NID_APP, pInfo != null, _API_VISIBILITY_PUBLIC, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+               std::unique_ptr<PackageInfo> pPkgInfo (pPkg->GetPackageInfoN(pkgId) );
+               SysTryReturn(NID_APP, pPkgInfo != null, _API_VISIBILITY_PUBLIC, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
 
-       const _PackageInfoImpl* pPkgInfo = _PackageInfoImpl::GetInstance(pInfo);
-       SysTryReturn(NID_APP, pPkgInfo != null, _API_VISIBILITY_PUBLIC, E_INVALID_STATE, "Invalid PackageInfo instance.");
+               const _PackageInfoImpl* pPkgInfoImpl = _PackageInfoImpl::GetInstance(pPkgInfo.get());
+               SysTryReturn(NID_APP, pPkgInfoImpl != null, _API_VISIBILITY_PUBLIC, E_INVALID_STATE, "Invalid PackageInfo instance.");
 
-       return pPkgInfo->GetApiVisibility();
+               visibility = pPkgInfoImpl->GetApiVisibility();
+       }
+       return visibility;
 }
 
 } } //Tizen::App