From cf9fd50884bcd2fd3a54e0e0c0c83a7b3326ca9b Mon Sep 17 00:00:00 2001 From: Daniel Mack Date: Thu, 6 Aug 2015 12:53:06 +0200 Subject: core: unit: remove bus slot after calling unit_done() The ->done callback in the unit's vtable might call into unit_unwatch_bus_name() and corrupt memory by that. Move the call down, and clean up the bus slot in case it hasn't been done yet. --- src/core/unit.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/core/unit.c b/src/core/unit.c index 6cc5824eb2..43a5ca1064 100644 --- a/src/core/unit.c +++ b/src/core/unit.c @@ -478,11 +478,12 @@ void unit_free(Unit *u) { if (u->manager->n_reloading <= 0) unit_remove_transient(u); - sd_bus_slot_unref(u->match_bus_slot); bus_unit_send_removed_signal(u); unit_done(u); + sd_bus_slot_unref(u->match_bus_slot); + unit_free_requires_mounts_for(u); SET_FOREACH(t, u->names, i) -- cgit v1.2.3-54-g00ecf