From 3b2775c5cea96060b2c4c44fee18b87b5d51cb02 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 30 Mar 2011 20:16:07 +0200 Subject: [PATCH] unit: when deserializing do reconnect to dbus/syslog when they show up --- src/unit.c | 77 +++++++++++++++++++++++++++--------------------------- 1 file changed, 39 insertions(+), 38 deletions(-) diff --git a/src/unit.c b/src/unit.c index 895e40178..4f83778c5 100644 --- a/src/unit.c +++ b/src/unit.c @@ -1221,55 +1221,56 @@ void unit_notify(Unit *u, UnitActiveState os, UnitActiveState ns, bool reload_su log_notice("Unit %s entered failed state.", u->meta.id); unit_trigger_on_failure(u); } + } + /* Some names are special */ + if (UNIT_IS_ACTIVE_OR_RELOADING(ns)) { + + if (unit_has_name(u, SPECIAL_DBUS_SERVICE)) + /* The bus just might have become available, + * hence try to connect to it, if we aren't + * yet connected. */ + bus_init(u->meta.manager, true); + + if (u->meta.type == UNIT_SERVICE && + !UNIT_IS_ACTIVE_OR_RELOADING(os) && + u->meta.manager->n_deserializing <= 0) { + /* Write audit record if we have just finished starting up */ + manager_send_unit_audit(u->meta.manager, u, AUDIT_SERVICE_START, true); + u->meta.in_audit = true; + } - /* Some names are special */ - if (UNIT_IS_ACTIVE_OR_RELOADING(ns)) { - - if (unit_has_name(u, SPECIAL_DBUS_SERVICE)) - /* The bus just might have become available, - * hence try to connect to it, if we aren't - * yet connected. */ - bus_init(u->meta.manager, true); - - if (u->meta.type == UNIT_SERVICE && - !UNIT_IS_ACTIVE_OR_RELOADING(os)) { - /* Write audit record if we have just finished starting up */ - manager_send_unit_audit(u->meta.manager, u, AUDIT_SERVICE_START, true); - u->meta.in_audit = true; - } - - if (!UNIT_IS_ACTIVE_OR_RELOADING(os)) - manager_send_unit_plymouth(u->meta.manager, u); + if (!UNIT_IS_ACTIVE_OR_RELOADING(os)) + manager_send_unit_plymouth(u->meta.manager, u); - } else { + } else { - /* We don't care about D-Bus here, since we'll get an - * asynchronous notification for it anyway. */ + /* We don't care about D-Bus here, since we'll get an + * asynchronous notification for it anyway. */ - if (u->meta.type == UNIT_SERVICE && - UNIT_IS_INACTIVE_OR_FAILED(ns) && - !UNIT_IS_INACTIVE_OR_FAILED(os)) { + if (u->meta.type == UNIT_SERVICE && + UNIT_IS_INACTIVE_OR_FAILED(ns) && + !UNIT_IS_INACTIVE_OR_FAILED(os) && + u->meta.manager->n_deserializing <= 0) { - /* Hmm, if there was no start record written - * write it now, so that we always have a nice - * pair */ - if (!u->meta.in_audit) { - manager_send_unit_audit(u->meta.manager, u, AUDIT_SERVICE_START, ns == UNIT_INACTIVE); + /* Hmm, if there was no start record written + * write it now, so that we always have a nice + * pair */ + if (!u->meta.in_audit) { + manager_send_unit_audit(u->meta.manager, u, AUDIT_SERVICE_START, ns == UNIT_INACTIVE); - if (ns == UNIT_INACTIVE) - manager_send_unit_audit(u->meta.manager, u, AUDIT_SERVICE_STOP, true); - } else - /* Write audit record if we have just finished shutting down */ - manager_send_unit_audit(u->meta.manager, u, AUDIT_SERVICE_STOP, ns == UNIT_INACTIVE); + if (ns == UNIT_INACTIVE) + manager_send_unit_audit(u->meta.manager, u, AUDIT_SERVICE_STOP, true); + } else + /* Write audit record if we have just finished shutting down */ + manager_send_unit_audit(u->meta.manager, u, AUDIT_SERVICE_STOP, ns == UNIT_INACTIVE); - u->meta.in_audit = false; - } + u->meta.in_audit = false; } - - manager_recheck_syslog(u->meta.manager); } + manager_recheck_syslog(u->meta.manager); + /* Maybe we finished startup and are now ready for being * stopped because unneeded? */ unit_check_unneeded(u); -- 2.30.2