From: Junghyun Yeon Date: Fri, 14 May 2021 06:26:33 +0000 (+0900) Subject: Fix memory leak X-Git-Tag: submit/tizen/20210610.070016~3^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=064e2b8fe36b71bad06ded2a426fefdbfd2ae016;p=platform%2Fcore%2Fappfw%2Fpkgmgr-tool.git Fix memory leak Filter handle should be freed before exit function unexpectdly. Change-Id: If5a5b07cbbe4bfd93b9a3eb924dc8e89b8658a5d Signed-off-by: Junghyun Yeon --- diff --git a/src/pkg_upgrade/src/pkg_finder.cc b/src/pkg_upgrade/src/pkg_finder.cc index 2370742..60cf2c0 100644 --- a/src/pkg_upgrade/src/pkg_finder.cc +++ b/src/pkg_upgrade/src/pkg_finder.cc @@ -134,8 +134,8 @@ int PkgFinder::PkgidListCb(const pkgmgrinfo_pkginfo_h handle, void* user_data) { } int PkgFinder::FindPreloadPkgidFromDb(bool read_only) { - int ret = 0; - pkgmgrinfo_pkginfo_filter_h handle = nullptr; + int ret; + pkgmgrinfo_pkginfo_filter_h handle; ret = pkgmgrinfo_pkginfo_filter_create(&handle); if (ret != PMINFO_R_OK) { @@ -143,14 +143,18 @@ int PkgFinder::FindPreloadPkgidFromDb(bool read_only) { return -1; } - ret = pkgmgrinfo_pkginfo_filter_add_bool(handle, + std::unique_ptr::type, + decltype(pkgmgrinfo_pkginfo_filter_destroy)*> handle_auto( + handle, pkgmgrinfo_pkginfo_filter_destroy); + + ret = pkgmgrinfo_pkginfo_filter_add_bool(handle_auto.get(), PMINFO_PKGINFO_PROP_PACKAGE_PRELOAD, 1); if (ret != PMINFO_R_OK) { LOG(ERROR) << "pkgmgrinfo_pkginfo_filter_add_bool failed " << ret; return -1; } - ret = pkgmgrinfo_pkginfo_filter_add_bool(handle, + ret = pkgmgrinfo_pkginfo_filter_add_bool(handle_auto.get(), PMINFO_PKGINFO_PROP_PACKAGE_READONLY, read_only ? 1 : 0); if (ret != PMINFO_R_OK) { LOG(ERROR) << "pkgmgrinfo_pkginfo_filter_add_bool failed " << ret; @@ -158,19 +162,13 @@ int PkgFinder::FindPreloadPkgidFromDb(bool read_only) { } read_only_ = read_only; - ret = pkgmgrinfo_pkginfo_filter_foreach_pkginfo(handle, + ret = pkgmgrinfo_pkginfo_filter_foreach_pkginfo(handle_auto.get(), PkgidListCb, this); if (ret != PMINFO_R_OK) { LOG(ERROR) << "pkgmgrinfo_pkginfo_filter_foreach_pkginfo failed " << ret; return -1; } - ret = pkgmgrinfo_pkginfo_filter_destroy(handle); - if (ret != PMINFO_R_OK) { - LOG(ERROR) << "pkgmgrinfo_pkginfo_filter_destroy failed " << ret; - return -1; - } - return 0; }