X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fjob.c;h=ec57144cb744743a2d3c8639814673cbdfca4688;hb=23e1e0c4a3bc93fb841ac9575953ed5d0ef5282d;hp=8ab12cd62410eb3287e4a6c052915108b79fa604;hpb=e6a3ff9593e88a57390534b8ad3de7a57cafbdb0;p=elogind.git diff --git a/src/job.c b/src/job.c index 8ab12cd62..ec57144cb 100644 --- a/src/job.c +++ b/src/job.c @@ -309,8 +309,12 @@ bool job_is_runnable(Job *j) { /* Checks whether there is any job running for the units this * job needs to be running after (in the case of a 'positive' - * job type) or before (in the case of a 'negative' job type - * . */ + * job type) or before (in the case of a 'negative' job + * type. */ + + /* First check if there is an override */ + if (j->ignore_deps) + return true; if (j->type == JOB_START || j->type == JOB_VERIFY_ACTIVE || @@ -372,6 +376,7 @@ int job_run_and_invalidate(Job *j) { j->state = JOB_RUNNING; job_add_to_dbus_queue(j); + job_start_timer(j); /* While we execute this operation the job might go away (for * example: because it is replaced by a new, conflicting @@ -385,8 +390,12 @@ int job_run_and_invalidate(Job *j) { case JOB_START: r = unit_start(j->unit); + + /* If this unit cannot be started, then simply + * wait */ if (r == -EBADR) r = 0; + break; case JOB_VERIFY_ACTIVE: { @@ -402,6 +411,11 @@ int job_run_and_invalidate(Job *j) { case JOB_STOP: r = unit_stop(j->unit); + + /* If this unit cannot stopped, then simply + * wait. */ + if (r == -EBADR) + r = 0; break; case JOB_RELOAD: @@ -490,7 +504,7 @@ int job_finish_and_invalidate(Job *j, bool success) { job_free(j); if (!success && j->type == JOB_START) - unit_status_printf(u, "Starting %s " ANSI_HIGHLIGHT_ON "failed" ANSI_HIGHLIGHT_OFF ".\n", unit_description(u)); + unit_status_printf(u, "Starting %s " ANSI_HIGHLIGHT_ON "failed" ANSI_HIGHLIGHT_OFF ", see 'systemctl status %s' for details.\n", unit_description(u), u->meta.id); /* Fail depending jobs on failure */ if (!success) { @@ -523,7 +537,7 @@ int job_finish_and_invalidate(Job *j, bool success) { } else if (t == JOB_STOP) { - SET_FOREACH(other, u->meta.dependencies[UNIT_CONFLICTS], i) + SET_FOREACH(other, u->meta.dependencies[UNIT_CONFLICTED_BY], i) if (other->meta.job && (other->meta.job->type == JOB_START || other->meta.job->type == JOB_VERIFY_ACTIVE || @@ -659,7 +673,8 @@ DEFINE_STRING_TABLE_LOOKUP(job_type, JobType); static const char* const job_mode_table[_JOB_MODE_MAX] = { [JOB_FAIL] = "fail", [JOB_REPLACE] = "replace", - [JOB_ISOLATE] = "isolate" + [JOB_ISOLATE] = "isolate", + [JOB_IGNORE_DEPENDENCIES] = "ignore-dependencies" }; DEFINE_STRING_TABLE_LOOKUP(job_mode, JobMode);