This is an automated email from the ASF dual-hosted git repository. pengzheng pushed a commit to branch feature/more-auto-cleanup in repository https://gitbox.apache.org/repos/asf/celix.git
commit 7311ec5528e2c16da16aa63cce597fd8de78975f Author: PengZheng <howto...@gmail.com> AuthorDate: Sun Aug 6 19:00:18 2023 +0800 Add autocleanup for celix_version_range. --- libs/framework/src/service_registry.c | 14 +++++--------- libs/utils/gtest/src/VersionRangeTestSuite.cc | 4 ++++ libs/utils/include/celix_version_range.h | 3 +++ 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/libs/framework/src/service_registry.c b/libs/framework/src/service_registry.c index c1e5ac3b..ed4e8664 100644 --- a/libs/framework/src/service_registry.c +++ b/libs/framework/src/service_registry.c @@ -27,6 +27,8 @@ #include "service_registration_private.h" #include "listener_hook_service.h" #include "celix_constants.h" +#include "celix_stdlib_cleanup.h" +#include "celix_version_range.h" #include "service_reference_private.h" #include "framework_private.h" @@ -820,17 +822,15 @@ char* celix_serviceRegistry_createFilterFor(celix_service_registry_t* registry, serviceName = "*"; } - char* versionRange = NULL; + celix_autofree char* versionRange = NULL; if (versionRangeStr != NULL) { - version_range_pt range; - celix_status_t status = versionRange_parse(versionRangeStr, &range); - if(status != CELIX_SUCCESS) { + celix_autoptr(celix_version_range_t) range = celix_versionRange_parse(versionRangeStr); + if(range == NULL) { celix_framework_log(registry->framework->logger, CELIX_LOG_LEVEL_ERROR, __FUNCTION__, __BASE_FILE__, __LINE__, "Error incorrect version range."); return NULL; } versionRange = versionRange_createLDAPFilter(range, CELIX_FRAMEWORK_SERVICE_VERSION); - versionRange_destroy(range); if (versionRange == NULL) { celix_framework_log(registry->framework->logger, CELIX_LOG_LEVEL_ERROR, __FUNCTION__, __BASE_FILE__, __LINE__, "Error creating LDAP filter."); @@ -849,10 +849,6 @@ char* celix_serviceRegistry_createFilterFor(celix_service_registry_t* registry, asprintf(&filter, "(&(%s=%s))", OSGI_FRAMEWORK_OBJECTCLASS, serviceName); } - if (versionRange != NULL){ - free(versionRange); - } - return filter; } diff --git a/libs/utils/gtest/src/VersionRangeTestSuite.cc b/libs/utils/gtest/src/VersionRangeTestSuite.cc index 85fa1a7e..4ae74772 100644 --- a/libs/utils/gtest/src/VersionRangeTestSuite.cc +++ b/libs/utils/gtest/src/VersionRangeTestSuite.cc @@ -43,6 +43,10 @@ TEST_F(VersionRangeTestSuite, create) { versionRange_destroy(range); } +TEST_F(VersionRangeTestSuite, cleanup) { + celix_autoptr(celix_version_range_t) range = celix_versionRange_createInfiniteVersionRange(); +} + TEST_F(VersionRangeTestSuite, createInfinite) { celix_status_t status = CELIX_SUCCESS; version_range_pt range = nullptr; diff --git a/libs/utils/include/celix_version_range.h b/libs/utils/include/celix_version_range.h index 9f677009..977dc71c 100644 --- a/libs/utils/include/celix_version_range.h +++ b/libs/utils/include/celix_version_range.h @@ -23,6 +23,7 @@ #include <stdbool.h> +#include "celix_cleanup.h" #include "celix_errno.h" #include "celix_version.h" #include "celix_utils_export.h" @@ -59,6 +60,8 @@ CELIX_UTILS_EXPORT celix_version_range_t* celix_versionRange_createInfiniteVersi CELIX_UTILS_EXPORT void celix_versionRange_destroy(celix_version_range_t* range); +CELIX_DEFINE_AUTOPTR_CLEANUP_FUNC(celix_version_range_t, celix_versionRange_destroy) + /** * Determine if the specified version is part of the version range or not. *