diff --git a/src/core/job.c b/src/core/job.c index 5982404cf0..741c79fdae 100644 --- a/src/core/job.c +++ b/src/core/job.c @@ -862,7 +862,7 @@ static void job_print_done_status_message(Unit *u, JobType t, JobResult result) status = job_print_done_status_messages[result].word; if (result != JOB_DONE) - manager_flip_auto_status(u->manager, true); + manager_flip_auto_status(u->manager, true, "job failed"); DISABLE_WARNING_FORMAT_NONLITERAL; unit_status_printf(u, status, format); diff --git a/src/core/main.c b/src/core/main.c index 09846eaadb..5302c4d27c 100644 --- a/src/core/main.c +++ b/src/core/main.c @@ -711,7 +711,7 @@ static void set_manager_settings(Manager *m) { m->kexec_watchdog = arg_kexec_watchdog; m->cad_burst_action = arg_cad_burst_action; - manager_set_show_status(m, arg_show_status); + manager_set_show_status(m, arg_show_status, "commandline"); m->status_unit_format = arg_status_unit_format; } diff --git a/src/core/manager.c b/src/core/manager.c index 7ccfde1567..feb7b3efd0 100644 --- a/src/core/manager.c +++ b/src/core/manager.c @@ -173,15 +173,15 @@ static void draw_cylon(char buffer[], size_t buflen, unsigned width, unsigned po } } -void manager_flip_auto_status(Manager *m, bool enable) { +void manager_flip_auto_status(Manager *m, bool enable, const char *reason) { assert(m); if (enable) { if (m->show_status == SHOW_STATUS_AUTO) - manager_set_show_status(m, SHOW_STATUS_TEMPORARY); + manager_set_show_status(m, SHOW_STATUS_TEMPORARY, reason); } else { if (m->show_status == SHOW_STATUS_TEMPORARY) - manager_set_show_status(m, SHOW_STATUS_AUTO); + manager_set_show_status(m, SHOW_STATUS_AUTO, reason); } } @@ -198,7 +198,7 @@ static void manager_print_jobs_in_progress(Manager *m) { assert(m); assert(m->n_running_jobs > 0); - manager_flip_auto_status(m, true); + manager_flip_auto_status(m, true, "delay"); print_nr = (m->jobs_in_progress_iteration / JOBS_IN_PROGRESS_PERIOD_DIVISOR) % m->n_running_jobs; @@ -2736,11 +2736,11 @@ static int manager_dispatch_signal_fd(sd_event_source *source, int fd, uint32_t switch (sfsi.ssi_signo - SIGRTMIN) { case 20: - manager_set_show_status(m, SHOW_STATUS_YES); + manager_set_show_status(m, SHOW_STATUS_YES, "signal"); break; case 21: - manager_set_show_status(m, SHOW_STATUS_NO); + manager_set_show_status(m, SHOW_STATUS_NO, "signal"); break; case 22: @@ -3402,7 +3402,7 @@ int manager_deserialize(Manager *m, FILE *f, FDSet *fds) { if (s < 0) log_notice("Failed to parse show-status flag '%s', ignoring.", val); else - manager_set_show_status(m, s); + manager_set_show_status(m, s, "deserialization"); } else if ((val = startswith(l, "log-level-override="))) { int level; @@ -3778,7 +3778,7 @@ void manager_check_finished(Manager *m) { return; } - manager_flip_auto_status(m, false); + manager_flip_auto_status(m, false, "boot finished"); /* Notify Type=idle units that we are done now */ manager_close_idle_pipe(m); @@ -4076,7 +4076,7 @@ void manager_recheck_journal(Manager *m) { log_open(); } -void manager_set_show_status(Manager *m, ShowStatus mode) { +void manager_set_show_status(Manager *m, ShowStatus mode, const char *reason) { assert(m); assert(IN_SET(mode, SHOW_STATUS_AUTO, SHOW_STATUS_NO, SHOW_STATUS_YES, SHOW_STATUS_TEMPORARY)); @@ -4085,9 +4085,10 @@ void manager_set_show_status(Manager *m, ShowStatus mode) { bool enabled = show_status_on(mode); if (mode != m->show_status) - log_debug("%s showing of status (%s).", + log_debug("%s (%s) showing of status (%s).", enabled ? "Enabling" : "Disabling", - strna(show_status_to_string(mode))); + strna(show_status_to_string(mode)), + reason); m->show_status = mode; if (enabled) diff --git a/src/core/manager.h b/src/core/manager.h index 67f9af5fc6..78d2cb5d3f 100644 --- a/src/core/manager.h +++ b/src/core/manager.h @@ -505,11 +505,11 @@ void disable_printk_ratelimit(void); void manager_recheck_dbus(Manager *m); void manager_recheck_journal(Manager *m); -void manager_set_show_status(Manager *m, ShowStatus mode); +void manager_set_show_status(Manager *m, ShowStatus mode, const char *reason); void manager_set_first_boot(Manager *m, bool b); void manager_status_printf(Manager *m, StatusType type, const char *status, const char *format, ...) _printf_(4,5); -void manager_flip_auto_status(Manager *m, bool enable); +void manager_flip_auto_status(Manager *m, bool enable, const char *reason); Set *manager_get_units_requiring_mounts_for(Manager *m, const char *path);