1
0
mirror of https://github.com/systemd/systemd.git synced 2025-01-07 21:18:41 +03:00

core/service: drop redundant flush_n_restarts indicator

Now that we track auto-restarts with a dedicated state,
there's no need for a separate variable for this.

I also took the chance to reorder some struct members.
This commit is contained in:
Mike Yuan 2024-08-03 21:46:51 +02:00 committed by Yu Watanabe
parent cec96f12ff
commit ce31dbf445
2 changed files with 16 additions and 32 deletions

View File

@ -2074,14 +2074,12 @@ static void service_enter_dead(Service *s, ServiceResult f, bool allow_restart)
log_unit_debug(UNIT(s), "Next restart interval calculated as: %s", FORMAT_TIMESPAN(restart_usec_next, 0));
service_set_state(s, SERVICE_AUTO_RESTART);
} else {
} else
/* If we shan't restart, the restart counter would be flushed out. But rather than doing that
* immediately here, this is delegated to service_start(), i.e. next start, so that the user
* can still introspect the counter. */
service_set_state(s, end_state);
/* If we shan't restart, then flush out the restart counter. But don't do that immediately, so that the
* user can still introspect the counter. Do so on the next start. */
s->flush_n_restarts = true;
}
/* The new state is in effect, let's decrease the fd store ref counter again. Let's also re-add us to the GC
* queue, so that the fd store is possibly gc'ed again */
unit_add_to_gc_queue(UNIT(s));
@ -2595,7 +2593,6 @@ static void service_enter_restart(Service *s, bool shortcut) {
* fully stopped, i.e. as long as it remains up or remains in auto-start states. The user can reset
* the counter explicitly however via the usual "systemctl reset-failure" logic. */
s->n_restarts++;
s->flush_n_restarts = false;
log_unit_struct(UNIT(s), LOG_INFO,
"MESSAGE_ID=" SD_MESSAGE_UNIT_RESTART_SCHEDULED_STR,
@ -2799,6 +2796,10 @@ static int service_start(Unit *u) {
s->main_pid_alien = false;
s->forbid_restart = false;
/* This is not an automatic restart? Flush the restart counter then. */
if (s->state != SERVICE_AUTO_RESTART_QUEUED)
s->n_restarts = 0;
s->status_text = mfree(s->status_text);
s->status_errno = 0;
s->status_bus_error = mfree(s->status_bus_error);
@ -2814,12 +2815,6 @@ static int service_start(Unit *u) {
exec_command_reset_status_list_array(s->exec_command, _SERVICE_EXEC_COMMAND_MAX);
exec_status_reset(&s->main_exec_status);
/* This is not an automatic restart? Flush the restart counter then */
if (s->flush_n_restarts) {
s->n_restarts = 0;
s->flush_n_restarts = false;
}
CGroupRuntime *crt = unit_get_cgroup_runtime(u);
if (crt)
crt->reset_accounting = true;
@ -3005,7 +3000,6 @@ static int service_serialize(Unit *u, FILE *f, FDSet *fds) {
(void) serialize_bool(f, "bus-name-good", s->bus_name_good);
(void) serialize_item_format(f, "n-restarts", "%u", s->n_restarts);
(void) serialize_bool(f, "flush-n-restarts", s->flush_n_restarts);
(void) serialize_bool(f, "forbid-restart", s->forbid_restart);
service_serialize_exec_command(u, f, s->control_command);
@ -3348,12 +3342,6 @@ static int service_deserialize_item(Unit *u, const char *key, const char *value,
if (r < 0)
log_unit_debug_errno(u, r, "Failed to parse serialized restart counter '%s': %m", value);
} else if (streq(key, "flush-n-restarts")) {
r = parse_boolean(value);
if (r < 0)
log_unit_debug_errno(u, r, "Failed to parse serialized flush restart counter setting '%s': %m", value);
else
s->flush_n_restarts = r;
} else if (streq(key, "forbid-restart")) {
r = parse_boolean(value);
if (r < 0)
@ -4875,7 +4863,6 @@ static void service_reset_failed(Unit *u) {
s->reload_result = SERVICE_SUCCESS;
s->clean_result = SERVICE_SUCCESS;
s->n_restarts = 0;
s->flush_n_restarts = false;
}
static PidRef* service_main_pid(Unit *u, bool *ret_is_alien) {

View File

@ -124,8 +124,9 @@ struct Service {
/* If set we'll read the main daemon PID from this file */
char *pid_file;
usec_t restart_usec;
unsigned n_restarts;
unsigned restart_steps;
usec_t restart_usec;
usec_t restart_max_delay_usec;
usec_t timeout_start_usec;
usec_t timeout_stop_usec;
@ -143,8 +144,6 @@ struct Service {
bool watchdog_override_enable;
sd_event_source *watchdog_event_source;
ExecCommand* exec_command[_SERVICE_EXEC_COMMAND_MAX];
ExecContext exec_context;
KillContext kill_context;
CGroupContext cgroup_context;
@ -154,14 +153,15 @@ struct Service {
/* The exit status of the real main process */
ExecStatus main_exec_status;
ExecCommand *exec_command[_SERVICE_EXEC_COMMAND_MAX];
/* The currently executed main process, which may be NULL if the main process got started via
* forking mode and not by us */
ExecCommand *main_command;
/* The currently executed control process */
ExecCommand *control_command;
/* The currently executed main process, which may be NULL if
* the main process got started via forking mode and not by
* us */
ExecCommand *main_command;
/* The ID of the control command currently being executed */
ServiceExecCommand control_command_id;
@ -225,9 +225,6 @@ struct Service {
int stdout_fd;
int stderr_fd;
unsigned n_restarts;
bool flush_n_restarts;
OOMPolicy oom_policy;
LIST_HEAD(OpenFile, open_files);