You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@celix.apache.org by pn...@apache.org on 2018/10/12 09:03:42 UTC

[25/34] celix git commit: CELIX-454: Adds some missing cleanup for the UDP MC pubsub admin.

CELIX-454: Adds some missing cleanup for the UDP MC pubsub admin.


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

Branch: refs/heads/develop
Commit: 8a81ff607f0d48541ebb447577e9e07f93348563
Parents: 3fafef6
Author: Pepijn Noltes <pe...@gmail.com>
Authored: Mon Oct 1 15:52:55 2018 +0200
Committer: Pepijn Noltes <pe...@gmail.com>
Committed: Mon Oct 1 15:52:55 2018 +0200

----------------------------------------------------------------------
 .../pubsub/pubsub_admin_udp_mc/src/large_udp.c  |  2 +-
 .../src/pubsub_udpmc_admin.c                    |  8 +++--
 .../src/pubsub_udpmc_topic_receiver.c           | 34 ++++++++++++++++++--
 libs/framework/src/bundle_context.c             | 29 +++++++++++------
 4 files changed, 58 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/celix/blob/8a81ff60/bundles/pubsub/pubsub_admin_udp_mc/src/large_udp.c
----------------------------------------------------------------------
diff --git a/bundles/pubsub/pubsub_admin_udp_mc/src/large_udp.c b/bundles/pubsub/pubsub_admin_udp_mc/src/large_udp.c
index 7455925..dd0fbbd 100644
--- a/bundles/pubsub/pubsub_admin_udp_mc/src/large_udp.c
+++ b/bundles/pubsub/pubsub_admin_udp_mc/src/large_udp.c
@@ -333,7 +333,7 @@ bool largeUdp_dataAvailable(largeUdp_pt handle, int fd, unsigned int *index, uns
 			result=false;
 		}
 		else{
-			arrayList_add(handle->udpPartLists, udpPartList);
+				arrayList_add(handle->udpPartLists, udpPartList);
 
 			if(udpPartList->nrPartsRemaining == 0) {
 				*index = nrUdpLists;

http://git-wip-us.apache.org/repos/asf/celix/blob/8a81ff60/bundles/pubsub/pubsub_admin_udp_mc/src/pubsub_udpmc_admin.c
----------------------------------------------------------------------
diff --git a/bundles/pubsub/pubsub_admin_udp_mc/src/pubsub_udpmc_admin.c b/bundles/pubsub/pubsub_admin_udp_mc/src/pubsub_udpmc_admin.c
index aea6de2..6d06ee6 100644
--- a/bundles/pubsub/pubsub_admin_udp_mc/src/pubsub_udpmc_admin.c
+++ b/bundles/pubsub/pubsub_admin_udp_mc/src/pubsub_udpmc_admin.c
@@ -64,17 +64,17 @@ struct pubsub_udpmc_admin {
 
     struct {
         celix_thread_mutex_t mutex;
-        hash_map_t *map; //key = scope:topic key, value = pubsub_udpmc_topic_sender_t
+        hash_map_t *map; //key = scope:topic key, value = pubsub_udpmc_topic_sender_t*
     } topicSenders;
 
     struct {
         celix_thread_mutex_t mutex;
-        hash_map_t *map; //key = scope:topic key, value = pubsub_udpmc_topic_sender_t
+        hash_map_t *map; //key = scope:topic key, value = pubsub_udpmc_topic_receiver_t*
     } topicReceivers;
 
     struct {
         celix_thread_mutex_t mutex;
-        hash_map_t *map; //key = endpoint uuid, value = psa_udpmc_connected_endpoint_entry_t
+        hash_map_t *map; //key = endpoint uuid, value = celix_properties_t*
     } discoveredEndpoints;
 
 };
@@ -644,6 +644,8 @@ void pubsub_udpmcAdmin_removeSerializerSvc(void *handle, void *svc, const celix_
             }
         }
         celixThreadMutex_unlock(&psa->topicReceivers.mutex);
+
+        free(entry);
     }
     celixThreadMutex_unlock(&psa->serializers.mutex);
 }

http://git-wip-us.apache.org/repos/asf/celix/blob/8a81ff60/bundles/pubsub/pubsub_admin_udp_mc/src/pubsub_udpmc_topic_receiver.c
----------------------------------------------------------------------
diff --git a/bundles/pubsub/pubsub_admin_udp_mc/src/pubsub_udpmc_topic_receiver.c b/bundles/pubsub/pubsub_admin_udp_mc/src/pubsub_udpmc_topic_receiver.c
index 24dfc08..efebf7c 100644
--- a/bundles/pubsub/pubsub_admin_udp_mc/src/pubsub_udpmc_topic_receiver.c
+++ b/bundles/pubsub/pubsub_admin_udp_mc/src/pubsub_udpmc_topic_receiver.c
@@ -146,14 +146,44 @@ void pubsub_udpmcTopicReceiver_destroy(pubsub_udpmc_topic_receiver_t *receiver)
         celixThreadMutex_unlock(&receiver->recvThread.mutex);
         celixThread_join(receiver->recvThread.thread, NULL);
 
+        celixThreadMutex_lock(&receiver->requestedConnections.mutex);
+        hash_map_iterator_t iter = hashMapIterator_construct(receiver->requestedConnections.map);
+        while (hashMapIterator_hasNext(&iter)) {
+            psa_udpmc_requested_connection_entry_t *entry = hashMapIterator_nextValue(&iter);
+            if (entry != NULL) {
+                free(entry->socketAddress);
+                free(entry->key);
+                free(entry);
+            }
+        }
+        celixThreadMutex_unlock(&receiver->requestedConnections.mutex);
+        hashMap_destroy(receiver->requestedConnections.map, false, false);
+
+        celixThreadMutex_lock(&receiver->subscribers.mutex);
+        iter = hashMapIterator_construct(receiver->subscribers.map);
+        while (hashMapIterator_hasNext(&iter)) {
+            psa_udpmc_subscriber_entry_t *entry = hashMapIterator_nextValue(&iter);
+            if (entry != NULL) {
+                if (receiver->serializer != NULL && entry->msgTypes != NULL) {
+                    receiver->serializer->destroySerializerMap(receiver->serializer->handle, entry->msgTypes);
+                }
+                free(entry);
+            }
+        }
+        celixThreadMutex_unlock(&receiver->subscribers.mutex);
+        hashMap_destroy(receiver->subscribers.map, false, false);
+
+
+
         celixThreadMutex_destroy(&receiver->subscribers.mutex);
         celixThreadMutex_destroy(&receiver->requestedConnections.mutex);
         celixThreadMutex_destroy(&receiver->recvThread.mutex);
 
         largeUdp_destroy(receiver->largeUdpHandle);
-        //TODO cleanup entries, free map
 
-        //TODO clean up requested connections map
+        free(receiver->scope);
+        free(receiver->topic);
+        free(receiver->ifIpAddress);
     }
     free(receiver);
 }

http://git-wip-us.apache.org/repos/asf/celix/blob/8a81ff60/libs/framework/src/bundle_context.c
----------------------------------------------------------------------
diff --git a/libs/framework/src/bundle_context.c b/libs/framework/src/bundle_context.c
index 1e86f2a..a60a842 100644
--- a/libs/framework/src/bundle_context.c
+++ b/libs/framework/src/bundle_context.c
@@ -647,27 +647,38 @@ static void bundleContext_cleanupServiceTrackerTrackers(bundle_context_t *ctx) {
 void celix_bundleContext_stopTracker(bundle_context_t *ctx, long trackerId) {
     if (ctx != NULL && trackerId >0) {
         bool found = false;
+        celix_bundle_context_bundle_tracker_entry_t *bundleTracker = NULL;
+        service_tracker_t *serviceTracker = NULL;
+        celix_bundle_context_service_tracker_tracker_entry_t *svcTrackerTracker = NULL;
+
         celixThreadMutex_lock(&ctx->mutex);
         if (hashMap_containsKey(ctx->bundleTrackers, (void*)trackerId)) {
             found = true;
-            celix_bundle_context_bundle_tracker_entry_t *tracker = hashMap_remove(ctx->bundleTrackers, (void*)trackerId);
-            fw_removeBundleListener(ctx->framework, ctx->bundle, &tracker->listener);
-            free(tracker);
+            bundleTracker = hashMap_remove(ctx->bundleTrackers, (void*)trackerId);
         } else if (hashMap_containsKey(ctx->serviceTrackers, (void*)trackerId)) {
             found = true;
-            service_tracker_t *tracker = hashMap_remove(ctx->serviceTrackers, (void*)trackerId);
-            celix_serviceTracker_destroy(tracker);
+            serviceTracker = hashMap_remove(ctx->serviceTrackers, (void*)trackerId);
         } else if (hashMap_containsKey(ctx->serviceTrackerTrackers, (void*)trackerId)) {
             found = true;
-            celix_bundle_context_service_tracker_tracker_entry_t *entry = hashMap_remove(ctx->serviceTrackerTrackers, (void*)trackerId);
-            serviceRegistration_unregister(entry->hookReg);
-            free(entry);
+            svcTrackerTracker = hashMap_remove(ctx->serviceTrackerTrackers, (void*)trackerId);
+        }
+        celixThreadMutex_unlock(&ctx->mutex);
+
+        if (bundleTracker != NULL) {
+            fw_removeBundleListener(ctx->framework, ctx->bundle, &bundleTracker->listener);
+            free(bundleTracker);
+        }
+        if (serviceTracker != NULL) {
+            celix_serviceTracker_destroy(serviceTracker);
+        }
+        if (svcTrackerTracker != NULL) {
+            serviceRegistration_unregister(svcTrackerTracker->hookReg);
+            free(svcTrackerTracker);
         }
 
         if (!found) {
             framework_logIfError(logger, CELIX_ILLEGAL_ARGUMENT, NULL, "No tracker with id %li found'", trackerId);
         }
-        celixThreadMutex_unlock(&ctx->mutex);
     }
 }