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/01 13:53:26 UTC
celix git commit: CELIX-454: Adds some missing cleanup for the UDP MC
pubsub admin.
Repository: celix
Updated Branches:
refs/heads/feature/CELIX-454-pubsub-disc 3fafef66a -> 8a81ff607
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/feature/CELIX-454-pubsub-disc
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);
}
}