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.
  *

Reply via email to