Author: bpetri
Date: Fri Dec 5 14:27:02 2014
New Revision: 1643293
URL: http://svn.apache.org/r1643293
Log:
CELIX-190: fixed memory leak during discovery_shutdown
Modified:
celix/trunk/remote_services/discovery/private/src/endpoint_discovery_poller.c
Modified:
celix/trunk/remote_services/discovery/private/src/endpoint_discovery_poller.c
URL:
http://svn.apache.org/viewvc/celix/trunk/remote_services/discovery/private/src/endpoint_discovery_poller.c?rev=1643293&r1=1643292&r2=1643293&view=diff
==============================================================================
---
celix/trunk/remote_services/discovery/private/src/endpoint_discovery_poller.c
(original)
+++
celix/trunk/remote_services/discovery/private/src/endpoint_discovery_poller.c
Fri Dec 5 14:27:02 2014
@@ -125,10 +125,22 @@ celix_status_t endpointDiscoveryPoller_d
celixThread_join(poller->pollerThread, NULL);
- status = celixThreadMutex_lock(&poller->pollerLock);
- if (status != CELIX_SUCCESS) {
- return CELIX_BUNDLE_EXCEPTION;
- }
+ hash_map_iterator_pt iterator = hashMapIterator_create(poller->entries);
+ while (hashMapIterator_hasNext(iterator)) {
+ hash_map_entry_pt entry = hashMapIterator_nextEntry(iterator);
+
+ if ( endpointDiscoveryPoller_removeDiscoveryEndpoint(poller,
(char*) hashMapEntry_getKey(entry)) == CELIX_SUCCESS) {
+ hashMapIterator_destroy(iterator);
+ iterator = hashMapIterator_create(poller->entries);
+ }
+ }
+ hashMapIterator_destroy(iterator);
+
+ status = celixThreadMutex_lock(&poller->pollerLock);
+
+ if (status != CELIX_SUCCESS) {
+ return CELIX_BUNDLE_EXCEPTION;
+ }
hashMap_destroy(poller->entries, true, false);