]> err.no Git - systemd/commitdiff
unit: free data from merged unit when we don't need it anymore
authorLennart Poettering <lennart@poettering.net>
Sat, 10 Apr 2010 02:43:21 +0000 (04:43 +0200)
committerLennart Poettering <lennart@poettering.net>
Sat, 10 Apr 2010 16:00:20 +0000 (18:00 +0200)
unit.c

diff --git a/unit.c b/unit.c
index fe502dbff2b4b475e9346d888103afdef85fb4c9..d4f0538b36edc901a1b86336d4e226b6a515a685 100644 (file)
--- a/unit.c
+++ b/unit.c
@@ -424,11 +424,16 @@ int unit_merge(Unit *u, Unit *other) {
         for (d = 0; d < _UNIT_DEPENDENCY_MAX; d++)
                 merge_dependencies(u, other, d);
 
-        unit_add_to_dbus_queue(u);
-
         other->meta.load_state = UNIT_MERGED;
         other->meta.merged_into = u;
 
+        /* If there is still some data attached to the other node, we
+         * don't need it anymore, and can free it. */
+        if (other->meta.load_state != UNIT_STUB)
+                if (UNIT_VTABLE(other)->done)
+                        UNIT_VTABLE(other)->done(other);
+
+        unit_add_to_dbus_queue(u);
         unit_add_to_cleanup_queue(other);
 
         return 0;