You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@celix.apache.org by ab...@apache.org on 2015/02/17 10:29:56 UTC

svn commit: r1660329 - in /celix/trunk/framework/private/src: module.c resolver.c

Author: abroekhuis
Date: Tue Feb 17 09:29:55 2015
New Revision: 1660329

URL: http://svn.apache.org/r1660329
Log:
CELIX-219: Fixed memory leaks in the resolver.

The resolver now properly cleans up the capabilities list.
Modules now destroy the wires when needed (either on a destroy, or when set to NULL by the bundle).

Modified:
    celix/trunk/framework/private/src/module.c
    celix/trunk/framework/private/src/resolver.c

Modified: celix/trunk/framework/private/src/module.c
URL: http://svn.apache.org/viewvc/celix/trunk/framework/private/src/module.c?rev=1660329&r1=1660328&r2=1660329&view=diff
==============================================================================
--- celix/trunk/framework/private/src/module.c (original)
+++ celix/trunk/framework/private/src/module.c Tue Feb 17 09:29:55 2015
@@ -207,8 +207,15 @@ void module_setWires(module_pt module, l
     }
 
     if (module->wires != NULL) {
-    	linkedList_destroy(module->wires);
-    }
+		linked_list_iterator_pt iter = linkedListIterator_create(module->wires, 0);
+		while (linkedListIterator_hasNext(iter)) {
+			wire_pt next = linkedListIterator_next(iter);
+			linkedListIterator_remove(iter);
+			wire_destroy(next);
+		}
+		linkedListIterator_destroy(iter);
+		linkedList_destroy(module->wires);
+	}
 
 	module->wires = wires;
 

Modified: celix/trunk/framework/private/src/resolver.c
URL: http://svn.apache.org/viewvc/celix/trunk/framework/private/src/resolver.c?rev=1660329&r1=1660328&r2=1660329&view=diff
==============================================================================
--- celix/trunk/framework/private/src/resolver.c (original)
+++ celix/trunk/framework/private/src/resolver.c Tue Feb 17 09:29:55 2015
@@ -289,10 +289,16 @@ void resolver_removeModule(module_pt mod
             list = resolver_getCapabilityList(m_unresolvedServices, serviceName);
             if (list != NULL) {
                 linkedList_removeElement(list->capabilities, cap);
+                linkedList_destroy(list->capabilities);
+                free(list->serviceName);
+                free(list);
             }
             list = resolver_getCapabilityList(m_resolvedServices, serviceName);
             if (list != NULL) {
                 linkedList_removeElement(list->capabilities, cap);
+                linkedList_destroy(list->capabilities);
+                free(list->serviceName);
+				free(list);
             }
         }
     }