Author: bpetri
Date: Tue Oct 28 19:06:01 2014
New Revision: 1634951

URL: http://svn.apache.org/r1634951
Log:
CELIX-175: remove elements from iterator to prevent another handling when 
topology manager is shutdown

Modified:
    celix/trunk/remote_services/topology_manager/private/src/topology_manager.c

Modified: 
celix/trunk/remote_services/topology_manager/private/src/topology_manager.c
URL: 
http://svn.apache.org/viewvc/celix/trunk/remote_services/topology_manager/private/src/topology_manager.c?rev=1634951&r1=1634950&r2=1634951&view=diff
==============================================================================
--- celix/trunk/remote_services/topology_manager/private/src/topology_manager.c 
(original)
+++ celix/trunk/remote_services/topology_manager/private/src/topology_manager.c 
Tue Oct 28 19:06:01 2014
@@ -407,16 +407,21 @@ celix_status_t topologyManager_removeExp
                        hash_map_entry_pt entry = 
hashMapIterator_nextEntry(iter);
 
                        remote_service_admin_service_pt rsa = 
hashMapEntry_getKey(entry);
-                       array_list_pt exports = hashMapEntry_getValue(entry);
+                       array_list_pt exportRegistrations = 
hashMapEntry_getValue(entry);
 
-                       for (int exportsIter = 0; exportsIter < 
arrayList_size(exports); exportsIter++) {
-                               export_registration_pt export = 
arrayList_get(exports, exportsIter);
+                       for (int exportsIter = 0; exportsIter < 
arrayList_size(exportRegistrations); exportsIter++) {
+                               export_registration_pt export = 
arrayList_get(exportRegistrations, exportsIter);
                                rsa->exportRegistration_close(export);
 
                                
topologyManager_notifyListenersEndpointRemoved(manager, rsa, export);
                        }
-                       arrayList_destroy(exports);
-                       exports = NULL;
+                       arrayList_destroy(exportRegistrations);
+                       exportRegistrations = NULL;
+
+                       hashMap_remove(exports, rsa);
+                       hashMapIterator_destroy(iter);
+                       iter = hashMapIterator_create(exports);
+
                }
                hashMapIterator_destroy(iter);
        }


Reply via email to