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);
 


Reply via email to