m->exit_code = _MANAGER_EXIT_CODE_INVALID;
m->default_timer_accuracy_usec = USEC_PER_MINUTE;
m->start_timeout_usec = DEFAULT_MANAGER_START_TIMEOUT_USEC;
- m->start_timeout_action = FAILURE_ACTION_REBOOT_FORCE;
+ m->start_timeout_action = FAILURE_ACTION_POWEROFF_FORCE;
m->idle_pipe[0] = m->idle_pipe[1] = m->idle_pipe[2] = m->idle_pipe[3] = -1;
if (r < 0)
goto fail;
- r = hashmap_ensure_allocated(&m->units, string_hash_func, string_compare_func);
+ r = hashmap_ensure_allocated(&m->units, &string_hash_ops);
if (r < 0)
goto fail;
- r = hashmap_ensure_allocated(&m->jobs, trivial_hash_func, trivial_compare_func);
+ r = hashmap_ensure_allocated(&m->jobs, NULL);
if (r < 0)
goto fail;
- r = hashmap_ensure_allocated(&m->cgroup_unit, string_hash_func, string_compare_func);
+ r = hashmap_ensure_allocated(&m->cgroup_unit, &string_hash_ops);
if (r < 0)
goto fail;
- r = hashmap_ensure_allocated(&m->watch_bus, string_hash_func, string_compare_func);
+ r = hashmap_ensure_allocated(&m->watch_bus, &string_hash_ops);
if (r < 0)
goto fail;
- r = set_ensure_allocated(&m->startup_units, trivial_hash_func, trivial_compare_func);
+ r = set_ensure_allocated(&m->startup_units, NULL);
if (r < 0)
goto fail;
- r = set_ensure_allocated(&m->failed_units, trivial_hash_func, trivial_compare_func);
+ r = set_ensure_allocated(&m->failed_units, NULL);
if (r < 0)
goto fail;
static void manager_build_unit_path_cache(Manager *m) {
char **i;
- _cleanup_free_ DIR *d = NULL;
+ _cleanup_closedir_ DIR *d = NULL;
int r;
assert(m);
set_free_free(m->unit_path_cache);
- m->unit_path_cache = set_new(string_hash_func, string_compare_func);
+ m->unit_path_cache = set_new(&string_hash_ops);
if (!m->unit_path_cache) {
log_error("Failed to allocate unit path cache.");
return;
if (!strv_isempty(plus)) {
b = strv_env_merge(2, l, plus);
- if (!b)
+ if (!b) {
+ strv_free(a);
return -ENOMEM;
+ }
l = b;
}
if (m->no_console_output)
return false;
- if (!IN_SET(manager_state(m), MANAGER_STARTING, MANAGER_STOPPING))
+ if (!IN_SET(manager_state(m), MANAGER_INITIALIZING, MANAGER_STARTING, MANAGER_STOPPING))
return false;
if (m->show_status > 0)
assert(m);
/* Did we ever finish booting? If not then we are still starting up */
- if (!dual_timestamp_is_set(&m->finish_timestamp))
+ if (!dual_timestamp_is_set(&m->finish_timestamp)) {
+
+ u = manager_get_unit(m, SPECIAL_BASIC_TARGET);
+ if (!u || !UNIT_IS_ACTIVE_OR_RELOADING(unit_active_state(u)))
+ return MANAGER_INITIALIZING;
+
return MANAGER_STARTING;
+ }
/* Is the special shutdown target queued? If so, we are in shutdown state */
u = manager_get_unit(m, SPECIAL_SHUTDOWN_TARGET);
}
static const char *const manager_state_table[_MANAGER_STATE_MAX] = {
+ [MANAGER_INITIALIZING] = "initializing",
[MANAGER_STARTING] = "starting",
[MANAGER_RUNNING] = "running",
[MANAGER_DEGRADED] = "degraded",