Repository: celix
Updated Branches:
  refs/heads/develop 7d87b0847 -> c31401633


Refactors some usage of the filters.


Project: http://git-wip-us.apache.org/repos/asf/celix/repo
Commit: http://git-wip-us.apache.org/repos/asf/celix/commit/33e96eb4
Tree: http://git-wip-us.apache.org/repos/asf/celix/tree/33e96eb4
Diff: http://git-wip-us.apache.org/repos/asf/celix/diff/33e96eb4

Branch: refs/heads/develop
Commit: 33e96eb480d3060cfeed73e5c85ec6504a0cd272
Parents: 7d87b08
Author: Pepijn Noltes <pepijnnol...@gmail.com>
Authored: Tue Feb 13 15:16:42 2018 +0100
Committer: Pepijn Noltes <pepijnnol...@gmail.com>
Committed: Tue Feb 13 15:16:42 2018 +0100

----------------------------------------------------------------------
 framework/include/listener_hook_service.h       |   3 +-
 framework/src/filter.c                          |   2 +-
 framework/src/framework.c                       | 140 +++++++++----------
 pubsub/pubsub_spi/include/pubsub_utils.h        |   6 +-
 pubsub/pubsub_spi/src/pubsub_utils.c            |   6 +-
 .../topology_manager/src/topology_manager.c     |   2 +-
 6 files changed, 73 insertions(+), 86 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/celix/blob/33e96eb4/framework/include/listener_hook_service.h
----------------------------------------------------------------------
diff --git a/framework/include/listener_hook_service.h 
b/framework/include/listener_hook_service.h
index 1f0c966..d80c09e 100644
--- a/framework/include/listener_hook_service.h
+++ b/framework/include/listener_hook_service.h
@@ -28,7 +28,6 @@
 #define LISTENER_HOOK_SERVICE_H_
 
 
-typedef struct listener_hook *listener_hook_pt;
 typedef struct listener_hook_info *listener_hook_info_pt;
 typedef struct listener_hook_service *listener_hook_service_pt;
 
@@ -41,7 +40,7 @@ extern "C" {
 
 struct listener_hook_info {
        bundle_context_pt context;
-       char *filter;
+       const char *filter;
        bool removed;
 };
 

http://git-wip-us.apache.org/repos/asf/celix/blob/33e96eb4/framework/src/filter.c
----------------------------------------------------------------------
diff --git a/framework/src/filter.c b/framework/src/filter.c
index 019dff6..b2d942b 100644
--- a/framework/src/filter.c
+++ b/framework/src/filter.c
@@ -110,9 +110,9 @@ void filter_destroy(celix_filter_t * filter) {
         filter->value = NULL;
                free((char*)filter->attribute);
                filter->attribute = NULL;
-               free(filter);
         free((char*)filter->filterStr);
         filter->filterStr = NULL;
+        free(filter);
        }
 }
 

http://git-wip-us.apache.org/repos/asf/celix/blob/33e96eb4/framework/src/framework.c
----------------------------------------------------------------------
diff --git a/framework/src/framework.c b/framework/src/framework.c
index b1db384..7d49254 100644
--- a/framework/src/framework.c
+++ b/framework/src/framework.c
@@ -1290,7 +1290,7 @@ celix_status_t fw_registerService(framework_pt framework, 
service_registration_p
                         info->context = lContext;
                         info->removed = false;
                     }
-                    subs = CELIX_DO_IF(subs, 
filter_getString(listener->filter, (const char**)&info->filter));
+                    subs = CELIX_DO_IF(subs, 
filter_getString(listener->filter, &info->filter));
 
                     if (subs == CELIX_SUCCESS) {
                         arrayList_add(infos, info);
@@ -1408,7 +1408,6 @@ celix_status_t framework_ungetService(framework_pt 
framework, bundle_pt bundle,
 
 void fw_addServiceListener(framework_pt framework, bundle_pt bundle, 
service_listener_pt listener, const char* sfilter) {
        array_list_pt listenerHooks = NULL;
-       listener_hook_info_pt info;
        unsigned int i;
 
        fw_service_listener_pt fwListener = (fw_service_listener_pt) calloc(1, 
sizeof(*fwListener));
@@ -1428,13 +1427,12 @@ void fw_addServiceListener(framework_pt framework, 
bundle_pt bundle, service_lis
 
        serviceRegistry_getListenerHooks(framework->registry, 
framework->bundle, &listenerHooks);
 
-       info = (listener_hook_info_pt) malloc(sizeof(*info));
+    struct listener_hook_info info;
 
        bundle_getContext(bundle, &context);
-       info->context = context;
-
-       info->removed = false;
-       info->filter = sfilter == NULL ? NULL : strdup(sfilter);
+       info.context = context;
+       info.removed = false;
+       info.filter = sfilter;
 
        for (i = 0; i < arrayList_size(listenerHooks); i++) {
                service_reference_pt ref = (service_reference_pt) 
arrayList_get(listenerHooks, i);
@@ -1445,90 +1443,80 @@ void fw_addServiceListener(framework_pt framework, 
bundle_pt bundle, service_lis
                fw_getService(framework, framework->bundle, ref, (const void 
**) &hook);
 
                arrayList_create(&infos);
-               arrayList_add(infos, info);
+               arrayList_add(infos, &info);
                hook->added(hook->handle, infos);
                serviceRegistry_ungetService(framework->registry, 
framework->bundle, ref, &ungetResult);
                serviceRegistry_ungetServiceReference(framework->registry, 
framework->bundle, ref);
                arrayList_destroy(infos);
        }
 
-       if (info->filter != NULL) {
-           free(info->filter);
-       }
-       free(info);
-
        arrayList_destroy(listenerHooks);
 }
 
 void fw_removeServiceListener(framework_pt framework, bundle_pt bundle, 
service_listener_pt listener) {
-       listener_hook_info_pt info = NULL;
-       unsigned int i;
-       fw_service_listener_pt element;
+       fw_service_listener_pt match = NULL;
 
        bundle_context_pt context;
        bundle_getContext(bundle, &context);
 
+    int i;
        for (i = 0; i < arrayList_size(framework->serviceListeners); i++) {
-               element = (fw_service_listener_pt) 
arrayList_get(framework->serviceListeners, i);
-               if (element->listener == listener && element->bundle == bundle) 
{
-                       bundle_context_pt lContext = NULL;
-
-                       info = (listener_hook_info_pt) malloc(sizeof(*info));
-
-                       bundle_getContext(element->bundle, &lContext);
-                       info->context = lContext;
-
-                       // TODO Filter toString;
-                       filter_getString(element->filter, (const 
char**)&info->filter);
-                       info->removed = true;
-
-                       arrayList_remove(framework->serviceListeners, i);
-                       i--;
-            
-            //unregistering retained service references. For these refs a 
unregister event will not be triggered.
-            int k;
-            int rSize = arrayList_size(element->retainedReferences);
-            for (k = 0; k < rSize; k += 1) {
-                service_reference_pt ref = 
arrayList_get(element->retainedReferences, k);
-                if (ref != NULL) {
-                    serviceRegistry_ungetServiceReference(framework->registry, 
element->bundle, ref); // decrease retain counter                               
        
-                } 
-            }
+        fw_service_listener_pt visit = (fw_service_listener_pt) 
arrayList_get(framework->serviceListeners, i);
+        if (visit->listener == listener && visit->bundle == bundle) {
+            match = visit;
+            arrayList_remove(framework->serviceListeners, i);
+            break;
+        }
+    }
 
-                       element->bundle = NULL;
-                       filter_destroy(element->filter);
-            arrayList_destroy(element->retainedReferences);
-                       element->filter = NULL;
-                       element->listener = NULL;
-                       free(element);
-                       element = NULL;
-                       break;
-               }
-       }
+    if (match != NULL) {
+        //invoke listener hooks
 
-       if (info != NULL) {
-               unsigned int i;
-               array_list_pt listenerHooks = NULL;
-               serviceRegistry_getListenerHooks(framework->registry, 
framework->bundle, &listenerHooks);
-
-               for (i = 0; i < arrayList_size(listenerHooks); i++) {
-                       service_reference_pt ref = (service_reference_pt) 
arrayList_get(listenerHooks, i);
-                       listener_hook_service_pt hook = NULL;
-                       array_list_pt infos = NULL;
-                       bool ungetResult;
-
-                       fw_getService(framework, framework->bundle, ref, (const 
void **) &hook);
-
-                       arrayList_create(&infos);
-                       arrayList_add(infos, info);
-                       hook->removed(hook->handle, infos);
-                       serviceRegistry_ungetService(framework->registry, 
framework->bundle, ref, &ungetResult);
-                       
serviceRegistry_ungetServiceReference(framework->registry, framework->bundle, 
ref);
-                       arrayList_destroy(infos);
-               }
+        bundle_context_pt lContext = NULL;
+
+        struct listener_hook_info info;
+        bundle_getContext(match->bundle, &lContext);
+        info.context = lContext;
+        filter_getString(match->filter, &info.filter);
+        info.removed = true;
 
-               arrayList_destroy(listenerHooks);
-        free(info);
+        array_list_pt listenerHooks = NULL;
+        serviceRegistry_getListenerHooks(framework->registry, 
framework->bundle, &listenerHooks);
+        for (i = 0; i < arrayList_size(listenerHooks); i++) {
+            service_reference_pt ref = (service_reference_pt) 
arrayList_get(listenerHooks, i);
+            listener_hook_service_pt hook = NULL;
+            array_list_pt infos = NULL;
+            bool ungetResult;
+
+            fw_getService(framework, framework->bundle, ref, (const void **) 
&hook);
+
+            arrayList_create(&infos);
+            arrayList_add(infos, &info);
+            hook->removed(hook->handle, infos);
+            serviceRegistry_ungetService(framework->registry, 
framework->bundle, ref, &ungetResult);
+            serviceRegistry_ungetServiceReference(framework->registry, 
framework->bundle, ref);
+            arrayList_destroy(infos);
+        }
+        arrayList_destroy(listenerHooks);
+    }
+
+    if (match != NULL) {
+        //unregistering retained service references. For these refs a 
unregister event will not be triggered.
+        int rSize = arrayList_size(match->retainedReferences);
+        for (i = 0; i < rSize; i += 1) {
+            service_reference_pt ref = 
arrayList_get(match->retainedReferences, i);
+            if (ref != NULL) {
+                serviceRegistry_ungetServiceReference(framework->registry, 
match->bundle, ref); // decrease retain counter
+            }
+        }
+
+        match->bundle = NULL;
+        filter_destroy(match->filter);
+        arrayList_destroy(match->retainedReferences);
+        match->filter = NULL;
+        match->listener = NULL;
+        free(match);
+        match = NULL;
        }
 }
 
@@ -1653,7 +1641,7 @@ void fw_serviceChanged(framework_pt framework, 
service_event_type_e eventType, s
                 event = (service_event_pt) malloc(sizeof (*event));
 
                 serviceRegistry_getServiceReference(framework->registry, 
element->bundle, registration, &reference);
-                
+
                 //NOTE: that you are never sure that the UNREGISTERED event 
will by handle by an service_listener. listener could be gone
                 //Every reference retained is therefore stored and called when 
a service listener is removed from the framework.
                 if (eventType == OSGI_FRAMEWORK_SERVICE_EVENT_REGISTERED) {
@@ -1667,14 +1655,14 @@ void fw_serviceChanged(framework_pt framework, 
service_event_type_e eventType, s
                 element->listener->serviceChanged(element->listener, event);
 
                 serviceRegistry_ungetServiceReference(framework->registry, 
element->bundle, reference);
-                
+
                 if (eventType == OSGI_FRAMEWORK_SERVICE_EVENT_UNREGISTERING) {
                     //if service listener was active when service was 
registered, release the retained reference
                     if (arrayList_removeElement(element->retainedReferences, 
reference)) {
                         
serviceRegistry_ungetServiceReference(framework->registry, element->bundle, 
reference); // decrease retain counter
                     }
                 }
-                
+
                 free(event);
 
             } else if (eventType == OSGI_FRAMEWORK_SERVICE_EVENT_MODIFIED) {

http://git-wip-us.apache.org/repos/asf/celix/blob/33e96eb4/pubsub/pubsub_spi/include/pubsub_utils.h
----------------------------------------------------------------------
diff --git a/pubsub/pubsub_spi/include/pubsub_utils.h 
b/pubsub/pubsub_spi/include/pubsub_utils.h
index aff5c72..eb961c9 100644
--- a/pubsub/pubsub_spi/include/pubsub_utils.h
+++ b/pubsub/pubsub_spi/include/pubsub_utils.h
@@ -30,10 +30,10 @@
 #include "bundle_context.h"
 #include "array_list.h"
 
-char* pubsub_getScopeFromFilter(char* bundle_filter);
-char* pubsub_getTopicFromFilter(char* bundle_filter);
+char* pubsub_getScopeFromFilter(const char* bundle_filter);
+char* pubsub_getTopicFromFilter(const char* bundle_filter);
 char* pubsub_getKeysBundleDir(bundle_context_pt ctx);
-array_list_pt pubsub_getTopicsFromString(char* string);
+array_list_pt pubsub_getTopicsFromString(const char* string);
 
 
 #endif /* PUBSUB_UTILS_H_ */

http://git-wip-us.apache.org/repos/asf/celix/blob/33e96eb4/pubsub/pubsub_spi/src/pubsub_utils.c
----------------------------------------------------------------------
diff --git a/pubsub/pubsub_spi/src/pubsub_utils.c 
b/pubsub/pubsub_spi/src/pubsub_utils.c
index 19b2271..53bacb8 100644
--- a/pubsub/pubsub_spi/src/pubsub_utils.c
+++ b/pubsub/pubsub_spi/src/pubsub_utils.c
@@ -42,7 +42,7 @@
 
 #define MAX_KEYBUNDLE_LENGTH 256
 
-char* pubsub_getScopeFromFilter(char* bundle_filter){
+char* pubsub_getScopeFromFilter(const char* bundle_filter){
 
        char* scope = NULL;
 
@@ -72,7 +72,7 @@ char* pubsub_getScopeFromFilter(char* bundle_filter){
        return scope;
 }
 
-char* pubsub_getTopicFromFilter(char* bundle_filter){
+char* pubsub_getTopicFromFilter(const char* bundle_filter){
 
        char* topic = NULL;
 
@@ -102,7 +102,7 @@ char* pubsub_getTopicFromFilter(char* bundle_filter){
 
 }
 
-array_list_pt pubsub_getTopicsFromString(char* string){
+array_list_pt pubsub_getTopicsFromString(const char* string){
 
        array_list_pt topic_list = NULL;
        arrayList_create(&topic_list);

http://git-wip-us.apache.org/repos/asf/celix/blob/33e96eb4/remote_services/topology_manager/src/topology_manager.c
----------------------------------------------------------------------
diff --git a/remote_services/topology_manager/src/topology_manager.c 
b/remote_services/topology_manager/src/topology_manager.c
index 6472b01..2126df5 100644
--- a/remote_services/topology_manager/src/topology_manager.c
+++ b/remote_services/topology_manager/src/topology_manager.c
@@ -866,7 +866,7 @@ celix_status_t 
topologyManager_notifyListenersEndpointRemoved(topology_manager_p
        return status;
 }
 
-celix_status_t topologyManager_extendFilter(topology_manager_pt manager, char 
*filter, char **updatedFilter) {
+static celix_status_t topologyManager_extendFilter(topology_manager_pt 
manager,  const char *filter, char **updatedFilter) {
        celix_status_t status;
        bundle_context_pt context = manager->context;
        const char* uuid = NULL;

Reply via email to