if (r < 0)
return r;
- log_unit_debug(u, "Unit freezer state was %s, now %s.",
- freezer_state_to_string(u->freezer_state),
- freezer_state_to_string(next));
-
r = write_string_file(path, one_zero(objective == FREEZER_FROZEN), WRITE_STRING_FILE_DISABLE_BUFFER);
if (r < 0)
return r;
- u->freezer_state = next;
+ unit_set_freezer_state(u, next);
return 1; /* Wait for cgroup event before replying */
skip:
- u->freezer_state = freezer_state_finish(next);
+ unit_set_freezer_state(u, freezer_state_finish(next));
return 0;
}
return UNIT_VTABLE(u)->freezer_action;
}
+void unit_set_freezer_state(Unit *u, FreezerState state) {
+ assert(u);
+ assert(state >= 0);
+ assert(state < _FREEZER_STATE_MAX);
+
+ if (u->freezer_state == state)
+ return;
+
+ log_unit_debug(u, "Freezer state changed %s -> %s",
+ freezer_state_to_string(u->freezer_state), freezer_state_to_string(state));
+
+ u->freezer_state = state;
+
+ unit_add_to_dbus_queue(u);
+}
+
void unit_frozen(Unit *u) {
assert(u);
bool unit_can_freeze(Unit *u);
int unit_freezer_action(Unit *u, FreezerAction action);
void unit_next_freezer_state(Unit *u, FreezerAction a, FreezerState *ret, FreezerState *ret_objective);
+void unit_set_freezer_state(Unit *u, FreezerState state);
void unit_frozen(Unit *u);
void unit_thawed(Unit *u);