X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fmanager.c;h=517473b802de5a0aa8408c83213e539f54743c39;hp=f542883b341b99ebee9cbf5545fcbd4d94030a9c;hb=fe71c02cf5aefad46e6662b2bbdf744975b43991;hpb=2528a7a62c4ad9b2f4773b608d208239299da50c diff --git a/src/manager.c b/src/manager.c index f542883b3..517473b80 100644 --- a/src/manager.c +++ b/src/manager.c @@ -989,7 +989,7 @@ static int transaction_verify_order_one(Manager *m, Job *j, Job *from, unsigned log_error("Unable to break cycle"); - dbus_set_error(e, BUS_ERROR_TRANSACTION_ORDER_IS_CYCLIC, "Transaction order is cyclic. See logs for details."); + dbus_set_error(e, BUS_ERROR_TRANSACTION_ORDER_IS_CYCLIC, "Transaction order is cyclic. See system logs for details."); return -ENOEXEC; } @@ -1226,7 +1226,8 @@ static int transaction_activate(Manager *m, JobMode mode, DBusError *e) { /* Second step: Try not to stop any running services if * we don't have to. Don't try to reverse running * jobs if we don't have to. */ - transaction_minimize_impact(m); + if (mode != JOB_ISOLATE) + transaction_minimize_impact(m); /* Third step: Drop redundant jobs */ transaction_drop_redundant(m); @@ -1396,13 +1397,13 @@ static int transaction_add_job_and_dependencies( assert(type < _JOB_TYPE_MAX); assert(unit); - if (unit->meta.load_state != UNIT_LOADED && unit->meta.load_state != UNIT_FAILED) { + if (unit->meta.load_state != UNIT_LOADED && unit->meta.load_state != UNIT_ERROR) { dbus_set_error(e, BUS_ERROR_LOAD_FAILED, "Unit %s is not loaded properly.", unit->meta.id); return -EINVAL; } - if (type != JOB_STOP && unit->meta.load_state == UNIT_FAILED) { - dbus_set_error(e, BUS_ERROR_LOAD_FAILED, "Unit %s failed to load: %s. You might find more information in the logs.", + if (type != JOB_STOP && unit->meta.load_state == UNIT_ERROR) { + dbus_set_error(e, BUS_ERROR_LOAD_FAILED, "Unit %s failed to load: %s. You might find more information in the system logs.", unit->meta.id, strerror(-unit->meta.load_error)); return -EINVAL; @@ -1431,13 +1432,17 @@ static int transaction_add_job_and_dependencies( SET_FOREACH(dep, ret->unit->meta.dependencies[UNIT_REQUIRES_OVERRIDABLE], i) if ((r = transaction_add_job_and_dependencies(m, JOB_START, dep, ret, !override, override, false, e, NULL)) < 0 && r != -EBADR) { log_warning("Cannot add dependency job for unit %s, ignoring: %s", dep->meta.id, bus_error(e, r)); - dbus_error_free(e); + + if (e) + dbus_error_free(e); } SET_FOREACH(dep, ret->unit->meta.dependencies[UNIT_WANTS], i) if ((r = transaction_add_job_and_dependencies(m, JOB_START, dep, ret, false, false, false, e, NULL)) < 0) { log_warning("Cannot add dependency job for unit %s, ignoring: %s", dep->meta.id, bus_error(e, r)); - dbus_error_free(e); + + if (e) + dbus_error_free(e); } SET_FOREACH(dep, ret->unit->meta.dependencies[UNIT_REQUISITE], i) @@ -1447,7 +1452,9 @@ static int transaction_add_job_and_dependencies( SET_FOREACH(dep, ret->unit->meta.dependencies[UNIT_REQUISITE_OVERRIDABLE], i) if ((r = transaction_add_job_and_dependencies(m, JOB_VERIFY_ACTIVE, dep, ret, !override, override, false, e, NULL)) < 0 && r != -EBADR) { log_warning("Cannot add dependency job for unit %s, ignoring: %s", dep->meta.id, bus_error(e, r)); - dbus_error_free(e); + + if (e) + dbus_error_free(e); } SET_FOREACH(dep, ret->unit->meta.dependencies[UNIT_CONFLICTS], i) @@ -1495,7 +1502,7 @@ static int transaction_add_isolate_jobs(Manager *m) { continue; /* No need to stop inactive jobs */ - if (UNIT_IS_INACTIVE_OR_MAINTENANCE(unit_active_state(u))) + if (UNIT_IS_INACTIVE_OR_FAILED(unit_active_state(u))) continue; /* Is there already something listed for this? */ @@ -2551,14 +2558,14 @@ bool manager_is_booting_or_shutting_down(Manager *m) { return false; } -void manager_reset_maintenance(Manager *m) { +void manager_reset_failed(Manager *m) { Unit *u; Iterator i; assert(m); HASHMAP_FOREACH(u, m->units, i) - unit_reset_maintenance(u); + unit_reset_failed(u); } int manager_set_console(Manager *m, const char *console) {