X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=unit.c;h=1959b1b940074d0ff23dd81ed3be72d511814f6a;hb=136337ff74f05be3d42a769d9f0cb99716c5c40f;hp=60d4bb7b2f5b48c34f5766cd5b065328e19259e7;hpb=6e2ef85b2572af82a0ce035516d65218bdc80fa4;p=elogind.git diff --git a/unit.c b/unit.c index 60d4bb7b2..1959b1b94 100644 --- a/unit.c +++ b/unit.c @@ -272,9 +272,14 @@ void unit_add_to_dbus_queue(Unit *u) { assert(u); assert(u->meta.type != _UNIT_TYPE_INVALID); - if (u->meta.load_state == UNIT_STUB || u->meta.in_dbus_queue || set_isempty(u->meta.manager->subscribed)) + if (u->meta.load_state == UNIT_STUB || u->meta.in_dbus_queue) return; + if (set_isempty(u->meta.manager->subscribed)) { + u->meta.sent_dbus_new_signal = true; + return; + } + LIST_PREPEND(Meta, dbus_queue, u->meta.manager->dbus_unit_queue, &u->meta); u->meta.in_dbus_queue = true; } @@ -558,7 +563,11 @@ void unit_dump(Unit *u, FILE *f, const char *prefix) { char *p2; const char *prefix2; CGroupBonding *b; - char timestamp1[FORMAT_TIMESTAMP_MAX], timestamp2[FORMAT_TIMESTAMP_MAX]; + char + timestamp1[FORMAT_TIMESTAMP_MAX], + timestamp2[FORMAT_TIMESTAMP_MAX], + timestamp3[FORMAT_TIMESTAMP_MAX], + timestamp4[FORMAT_TIMESTAMP_MAX]; assert(u); assert(u->meta.type >= 0); @@ -574,16 +583,20 @@ void unit_dump(Unit *u, FILE *f, const char *prefix) { "%s\tInstance: %s\n" "%s\tUnit Load State: %s\n" "%s\tUnit Active State: %s\n" + "%s\tInactive Exit Timestamp: %s\n" "%s\tActive Enter Timestamp: %s\n" "%s\tActive Exit Timestamp: %s\n" + "%s\tInactive Enter Timestamp: %s\n" "%s\tGC Check Good: %s\n", prefix, u->meta.id, prefix, unit_description(u), prefix, strna(u->meta.instance), prefix, unit_load_state_to_string(u->meta.load_state), prefix, unit_active_state_to_string(unit_active_state(u)), - prefix, strna(format_timestamp(timestamp1, sizeof(timestamp1), u->meta.active_enter_timestamp)), - prefix, strna(format_timestamp(timestamp2, sizeof(timestamp2), u->meta.active_exit_timestamp)), + prefix, strna(format_timestamp(timestamp1, sizeof(timestamp1), u->meta.inactive_exit_timestamp)), + prefix, strna(format_timestamp(timestamp2, sizeof(timestamp2), u->meta.active_enter_timestamp)), + prefix, strna(format_timestamp(timestamp3, sizeof(timestamp3), u->meta.active_exit_timestamp)), + prefix, strna(format_timestamp(timestamp4, sizeof(timestamp4), u->meta.inactive_enter_timestamp)), prefix, yes_no(unit_check_gc(u))); SET_FOREACH(t, u->meta.names, i) @@ -713,7 +726,7 @@ fail: u->meta.load_state = UNIT_FAILED; unit_add_to_dbus_queue(u); - log_error("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; } @@ -908,6 +921,7 @@ static void retroactively_stop_dependencies(Unit *u) { void unit_notify(Unit *u, UnitActiveState os, UnitActiveState ns) { bool unexpected = false; + usec_t ts; assert(u); assert(os < _UNIT_ACTIVE_STATE_MAX); @@ -920,10 +934,17 @@ void unit_notify(Unit *u, UnitActiveState os, UnitActiveState ns) { * this function will be called too and the utmp code below * relies on that! */ + ts = now(CLOCK_REALTIME); + + if (os == UNIT_INACTIVE && ns != UNIT_INACTIVE) + u->meta.inactive_exit_timestamp = ts; + else if (os != UNIT_INACTIVE && ns == UNIT_INACTIVE) + u->meta.inactive_enter_timestamp = ts; + if (!UNIT_IS_ACTIVE_OR_RELOADING(os) && UNIT_IS_ACTIVE_OR_RELOADING(ns)) - u->meta.active_enter_timestamp = now(CLOCK_REALTIME); + u->meta.active_enter_timestamp = ts; else if (UNIT_IS_ACTIVE_OR_RELOADING(os) && !UNIT_IS_ACTIVE_OR_RELOADING(ns)) - u->meta.active_exit_timestamp = now(CLOCK_REALTIME); + u->meta.active_exit_timestamp = ts; if (u->meta.job) { @@ -1011,7 +1032,7 @@ void unit_notify(Unit *u, UnitActiveState os, UnitActiveState ns) { /* The syslog daemon just might have become * available, hence try to connect to it, if * we aren't yet connected. */ - log_open_syslog(); + log_open(); if (u->meta.type == UNIT_MOUNT) /* Another directory became available, let's @@ -1843,7 +1864,7 @@ int unit_add_node_link(Unit *u, const char *what, bool wants) { /* Adds in links to the device node that this unit is based on */ - if (!path_startswith(what, "/dev/") && !path_startswith(what, "/sys/")) + if (!is_device_path(what)) return 0; if (!(e = unit_name_build_escape(what+1, NULL, ".device")))