From: Mike Yuan Date: Sat, 30 Mar 2024 13:16:49 +0000 (+0800) Subject: core/service: ensure we don't restart on SERVICE_SKIP_CONDITION X-Git-Tag: v256-rc1~348 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8959e17d736fbdbaf7cd912f35d23ced2e261327;p=thirdparty%2Fsystemd.git core/service: ensure we don't restart on SERVICE_SKIP_CONDITION service_shall_restart() always returns false if result is SERVICE_SKIP_CONDITION, so drop unreachable code. --- diff --git a/src/core/service.c b/src/core/service.c index a6e7af2a9a8..0a3717e34e9 100644 --- a/src/core/service.c +++ b/src/core/service.c @@ -1992,7 +1992,7 @@ static void service_enter_dead(Service *s, ServiceResult f, bool allow_restart) } else if (s->result == SERVICE_SKIP_CONDITION) { unit_log_skip(UNIT(s), service_result_to_string(s->result)); end_state = service_determine_dead_state(s); - restart_state = SERVICE_DEAD_BEFORE_AUTO_RESTART; + restart_state = _SERVICE_STATE_INVALID; /* Never restart if skipped due to condition failure */ } else { unit_log_failure(UNIT(s), service_result_to_string(s->result)); end_state = SERVICE_FAILED; @@ -2014,6 +2014,8 @@ static void service_enter_dead(Service *s, ServiceResult f, bool allow_restart) if (allow_restart) { usec_t restart_usec_next; + assert(restart_state >= 0 && restart_state < _SERVICE_STATE_MAX); + /* We make two state changes here: one that maps to the high-level UNIT_INACTIVE/UNIT_FAILED * state (i.e. a state indicating deactivation), and then one that that maps to the * high-level UNIT_STARTING state (i.e. a state indicating activation). We do this so that @@ -2513,7 +2515,6 @@ static void service_enter_condition(Service *s) { service_exec_flags(s->control_command_id, /* cred_flag = */ 0), s->timeout_start_usec, &s->control_pid); - if (r < 0) { log_unit_warning_errno(UNIT(s), r, "Failed to spawn 'exec-condition' task: %m"); goto fail;