X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Funit.c;h=34bfd3f64cd74a4f82e23de09ece3afb0bec9948;hp=b93777bec68dac245d3d3a87b5d7a036c43278dc;hb=77d5f105bf63330350c7bddacdeda914f945590f;hpb=41b02ec77e54871eaa593c50fb31809814f627a7 diff --git a/src/unit.c b/src/unit.c index b93777bec..34bfd3f64 100644 --- a/src/unit.c +++ b/src/unit.c @@ -1,4 +1,4 @@ -/*-*- Mode: C; c-basic-offset: 8 -*-*/ +/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ /*** This file is part of systemd. @@ -672,6 +672,9 @@ void unit_dump(Unit *u, FILE *f, const char *prefix) { fprintf(f, "%s\tMerged into: %s\n", prefix, u->meta.merged_into->meta.id); + else if (u->meta.load_state == UNIT_FAILED) + fprintf(f, "%s\tLoad Error Code: %s\n", prefix, strerror(-u->meta.load_error)); + if (u->meta.job) job_dump(u->meta.job, f, prefix2); @@ -722,16 +725,6 @@ int unit_load_fragment_and_dropin_optional(Unit *u) { return 0; } -/* Common implementation for multiple backends */ -int unit_load_nop(Unit *u) { - assert(u); - - if (u->meta.load_state == UNIT_STUB) - u->meta.load_state = UNIT_LOADED; - - return 0; -} - int unit_load(Unit *u) { int r; @@ -766,9 +759,10 @@ int unit_load(Unit *u) { fail: u->meta.load_state = UNIT_FAILED; + u->meta.load_error = r; unit_add_to_dbus_queue(u); - log_notice("Failed to load configuration for %s: %s", u->meta.id, strerror(-r)); + log_debug("Failed to load configuration for %s: %s", u->meta.id, strerror(-r)); return r; } @@ -859,10 +853,10 @@ int unit_reload(Unit *u) { return -EBADR; state = unit_active_state(u); - if (unit_active_state(u) == UNIT_RELOADING) + if (state == UNIT_RELOADING) return -EALREADY; - if (unit_active_state(u) != UNIT_ACTIVE) + if (state != UNIT_ACTIVE) return -ENOEXEC; unit_add_to_dbus_queue(u); @@ -990,8 +984,7 @@ void unit_notify(Unit *u, UnitActiveState os, UnitActiveState ns) { * even if they might map to the same high-level * UnitActiveState! That means that ns == os is OK an expected * behaviour here. For example: if a mount point is remounted - * this function will be called too and the utmp code below - * relies on that! */ + * this function will be called too! */ dual_timestamp_get(&ts); @@ -1115,9 +1108,11 @@ void unit_notify(Unit *u, UnitActiveState os, UnitActiveState ns) { log_open(); if (u->meta.type == UNIT_SERVICE && - !UNIT_IS_ACTIVE_OR_RELOADING(os)) + !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, 1); + u->meta.in_audit = true; + } } else { @@ -1132,10 +1127,22 @@ void unit_notify(Unit *u, UnitActiveState os, UnitActiveState ns) { if (u->meta.type == UNIT_SERVICE && UNIT_IS_INACTIVE_OR_MAINTENANCE(ns) && - !UNIT_IS_INACTIVE_OR_MAINTENANCE(os)) + !UNIT_IS_INACTIVE_OR_MAINTENANCE(os)) { + + /* 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); - /* 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; + } } /* Maybe we finished startup and are now ready for being @@ -1970,6 +1977,7 @@ int unit_deserialize(Unit *u, FILE *f, FDSet *fds) { return -errno; } + char_array_0(line); l = strstrip(line); /* End marker */ @@ -2110,20 +2118,6 @@ Unit *unit_following(Unit *u) { return NULL; } -static const char* const unit_type_table[_UNIT_TYPE_MAX] = { - [UNIT_SERVICE] = "service", - [UNIT_TIMER] = "timer", - [UNIT_SOCKET] = "socket", - [UNIT_TARGET] = "target", - [UNIT_DEVICE] = "device", - [UNIT_MOUNT] = "mount", - [UNIT_AUTOMOUNT] = "automount", - [UNIT_SNAPSHOT] = "snapshot", - [UNIT_SWAP] = "swap" -}; - -DEFINE_STRING_TABLE_LOOKUP(unit_type, UnitType); - static const char* const unit_load_state_table[_UNIT_LOAD_STATE_MAX] = { [UNIT_STUB] = "stub", [UNIT_LOADED] = "loaded",