From: Mike Yuan Date: Sat, 25 May 2024 10:46:23 +0000 (+0800) Subject: core/unit: use switch for unit_next_freezer_state X-Git-Tag: v257-rc1~888^2~9 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=aba5e4660fe12679bec5cd598b9a49a180b83f43;p=thirdparty%2Fsystemd.git core/unit: use switch for unit_next_freezer_state --- diff --git a/src/core/unit.c b/src/core/unit.c index ced23a83b21..241f09bf5ab 100644 --- a/src/core/unit.c +++ b/src/core/unit.c @@ -6178,45 +6178,56 @@ void unit_next_freezer_state(Unit *u, FreezerAction action, FreezerState *ret, F else parent = FREEZER_RUNNING; - if (action == FREEZER_FREEZE) { + switch (action) { + + case FREEZER_FREEZE: /* We always "promote" a freeze initiated by parent into a normal freeze */ if (IN_SET(curr, FREEZER_FROZEN, FREEZER_FROZEN_BY_PARENT)) next = FREEZER_FROZEN; else next = FREEZER_FREEZING; - } else if (action == FREEZER_THAW) { + break; + + case FREEZER_THAW: /* Thawing is the most complicated operation here, because we can't thaw a unit * if its parent is frozen. So we instead "demote" a normal freeze into a freeze * initiated by parent if the parent is frozen */ - if (IN_SET(curr, FREEZER_RUNNING, FREEZER_THAWING, FREEZER_FREEZING_BY_PARENT, FREEZER_FROZEN_BY_PARENT)) + if (IN_SET(curr, FREEZER_RUNNING, FREEZER_THAWING, + FREEZER_FREEZING_BY_PARENT, FREEZER_FROZEN_BY_PARENT)) /* Should usually be refused by unit_freezer_action */ next = curr; else if (curr == FREEZER_FREEZING) { if (IN_SET(parent, FREEZER_RUNNING, FREEZER_THAWING)) next = FREEZER_THAWING; else next = FREEZER_FREEZING_BY_PARENT; - } else { - assert(curr == FREEZER_FROZEN); + } else if (curr == FREEZER_FROZEN) { if (IN_SET(parent, FREEZER_RUNNING, FREEZER_THAWING)) next = FREEZER_THAWING; else next = FREEZER_FROZEN_BY_PARENT; - } - } else if (action == FREEZER_PARENT_FREEZE) { + } else + assert_not_reached(); + break; + + case FREEZER_PARENT_FREEZE: /* We need to avoid accidentally demoting units frozen manually */ if (IN_SET(curr, FREEZER_FREEZING, FREEZER_FROZEN, FREEZER_FROZEN_BY_PARENT)) next = curr; else next = FREEZER_FREEZING_BY_PARENT; - } else { - assert(action == FREEZER_PARENT_THAW); + break; + case FREEZER_PARENT_THAW: /* We don't want to thaw units from a parent if they were frozen * manually, so for such units this action is a no-op */ if (IN_SET(curr, FREEZER_RUNNING, FREEZER_FREEZING, FREEZER_FROZEN)) next = curr; else next = FREEZER_THAWING; + break; + + default: + assert_not_reached(); } objective = freezer_state_finish(next);