diff options
author | Lennart Poettering <lennart@poettering.net> | 2010-04-10 04:43:21 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2010-04-10 18:00:20 +0200 |
commit | 3616a49cb0140ad1832ed861d9d9eb1ae632398e (patch) | |
tree | 7b13e1d775e90cfe830dd45707388d7e24ea2256 | |
parent | 819e213fbfecbb09d8e61a5463d2fbf155fa67f9 (diff) |
unit: free data from merged unit when we don't need it anymore
-rw-r--r-- | unit.c | 9 |
1 files changed, 7 insertions, 2 deletions
@@ -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; |