X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fmanager.c;h=8bbde7c38e09f66733b43697dc9fdd471be5778e;hp=b2aa8ee45e41d507cb79220d4bf59696a2231ec3;hb=e75c058023a7e130599f5a3ae2981540d8e397c8;hpb=3aea3b35979b377b7673132b601aab8a33e20cdc diff --git a/src/manager.c b/src/manager.c index b2aa8ee45..8bbde7c38 100644 --- a/src/manager.c +++ b/src/manager.c @@ -294,7 +294,7 @@ static unsigned manager_dispatch_cleanup_queue(Manager *m) { } enum { - GC_OFFSET_IN_PATH, /* This one is on the path we were travelling */ + GC_OFFSET_IN_PATH, /* This one is on the path we were traveling */ GC_OFFSET_UNSURE, /* No clue */ GC_OFFSET_GOOD, /* We still need this unit */ GC_OFFSET_BAD, /* We don't need this unit anymore */ @@ -768,7 +768,7 @@ static int delete_one_unmergeable_job(Manager *m, Job *j) { /* Tries to delete one item in the linked list * j->transaction_next->transaction_next->... that conflicts - * whith another one, in an attempt to make an inconsistent + * with another one, in an attempt to make an inconsistent * transaction work. */ /* We rely here on the fact that if a merged with b does not @@ -1286,7 +1286,7 @@ static int transaction_activate(Manager *m, JobMode mode, DBusError *e) { break; if (r != -EAGAIN) { - log_warning("Requested transaction contains unmergable jobs: %s", bus_error(e, r)); + log_warning("Requested transaction contains unmergeable jobs: %s", bus_error(e, r)); goto rollback; } @@ -1330,7 +1330,7 @@ static Job* transaction_add_one_job(Manager *m, JobType type, Unit *unit, bool o assert(m); assert(unit); - /* Looks for an axisting prospective job and returns that. If + /* Looks for an existing prospective job and returns that. If * it doesn't exist it is created and added to the prospective * jobs list. */ @@ -1412,6 +1412,7 @@ static int transaction_add_job_and_dependencies( bool matters, bool override, bool conflicts, + bool ignore_deps, DBusError *e, Job **_ret) { Job *ret; @@ -1459,18 +1460,20 @@ static int transaction_add_job_and_dependencies( if (!(ret = transaction_add_one_job(m, type, unit, override, &is_new))) return -ENOMEM; + ret->ignore_deps = ret->ignore_deps || ignore_deps; + /* Then, add a link to the job. */ if (!job_dependency_new(by, ret, matters, conflicts)) return -ENOMEM; - if (is_new) { + if (is_new && !ignore_deps) { Set *following; /* If we are following some other unit, make sure we * add all dependencies of everybody following. */ if (unit_following_set(ret->unit, &following) > 0) { SET_FOREACH(dep, following, i) - if ((r = transaction_add_job_and_dependencies(m, type, dep, ret, false, override, false, e, NULL)) < 0) { + if ((r = transaction_add_job_and_dependencies(m, type, dep, ret, false, override, false, false, e, NULL)) < 0) { log_warning("Cannot add dependency job for unit %s, ignoring: %s", dep->meta.id, bus_error(e, r)); if (e) @@ -1483,7 +1486,7 @@ static int transaction_add_job_and_dependencies( /* Finally, recursively add in all dependencies. */ if (type == JOB_START || type == JOB_RELOAD_OR_START) { SET_FOREACH(dep, ret->unit->meta.dependencies[UNIT_REQUIRES], i) - if ((r = transaction_add_job_and_dependencies(m, JOB_START, dep, ret, true, override, false, e, NULL)) < 0) { + if ((r = transaction_add_job_and_dependencies(m, JOB_START, dep, ret, true, override, false, false, e, NULL)) < 0) { if (r != -EBADR) goto fail; @@ -1492,7 +1495,7 @@ static int transaction_add_job_and_dependencies( } SET_FOREACH(dep, ret->unit->meta.dependencies[UNIT_BIND_TO], i) - if ((r = transaction_add_job_and_dependencies(m, JOB_START, dep, ret, true, override, false, e, NULL)) < 0) { + if ((r = transaction_add_job_and_dependencies(m, JOB_START, dep, ret, true, override, false, false, e, NULL)) < 0) { if (r != -EBADR) goto fail; @@ -1502,7 +1505,7 @@ 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) { + if ((r = transaction_add_job_and_dependencies(m, JOB_START, dep, ret, !override, override, false, false, e, NULL)) < 0) { log_warning("Cannot add dependency job for unit %s, ignoring: %s", dep->meta.id, bus_error(e, r)); if (e) @@ -1510,7 +1513,7 @@ static int transaction_add_job_and_dependencies( } 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) { + if ((r = transaction_add_job_and_dependencies(m, JOB_START, dep, ret, false, false, false, false, e, NULL)) < 0) { log_warning("Cannot add dependency job for unit %s, ignoring: %s", dep->meta.id, bus_error(e, r)); if (e) @@ -1518,7 +1521,7 @@ static int transaction_add_job_and_dependencies( } SET_FOREACH(dep, ret->unit->meta.dependencies[UNIT_REQUISITE], i) - if ((r = transaction_add_job_and_dependencies(m, JOB_VERIFY_ACTIVE, dep, ret, true, override, false, e, NULL)) < 0) { + if ((r = transaction_add_job_and_dependencies(m, JOB_VERIFY_ACTIVE, dep, ret, true, override, false, false, e, NULL)) < 0) { if (r != -EBADR) goto fail; @@ -1528,7 +1531,7 @@ 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) { + if ((r = transaction_add_job_and_dependencies(m, JOB_VERIFY_ACTIVE, dep, ret, !override, override, false, false, e, NULL)) < 0) { log_warning("Cannot add dependency job for unit %s, ignoring: %s", dep->meta.id, bus_error(e, r)); if (e) @@ -1536,7 +1539,7 @@ static int transaction_add_job_and_dependencies( } SET_FOREACH(dep, ret->unit->meta.dependencies[UNIT_CONFLICTS], i) - if ((r = transaction_add_job_and_dependencies(m, JOB_STOP, dep, ret, true, override, true, e, NULL)) < 0) { + if ((r = transaction_add_job_and_dependencies(m, JOB_STOP, dep, ret, true, override, true, false, e, NULL)) < 0) { if (r != -EBADR) goto fail; @@ -1546,7 +1549,7 @@ static int transaction_add_job_and_dependencies( } SET_FOREACH(dep, ret->unit->meta.dependencies[UNIT_CONFLICTED_BY], i) - if ((r = transaction_add_job_and_dependencies(m, JOB_STOP, dep, ret, false, override, false, e, NULL)) < 0) { + if ((r = transaction_add_job_and_dependencies(m, JOB_STOP, dep, ret, false, override, false, false, e, NULL)) < 0) { log_warning("Cannot add dependency job for unit %s, ignoring: %s", dep->meta.id, bus_error(e, r)); if (e) @@ -1556,7 +1559,7 @@ static int transaction_add_job_and_dependencies( } else if (type == JOB_STOP || type == JOB_RESTART || type == JOB_TRY_RESTART) { SET_FOREACH(dep, ret->unit->meta.dependencies[UNIT_REQUIRED_BY], i) - if ((r = transaction_add_job_and_dependencies(m, type, dep, ret, true, override, false, e, NULL)) < 0) { + if ((r = transaction_add_job_and_dependencies(m, type, dep, ret, true, override, false, false, e, NULL)) < 0) { if (r != -EBADR) goto fail; @@ -1566,7 +1569,7 @@ static int transaction_add_job_and_dependencies( } SET_FOREACH(dep, ret->unit->meta.dependencies[UNIT_BOUND_BY], i) - if ((r = transaction_add_job_and_dependencies(m, type, dep, ret, true, override, false, e, NULL)) < 0) { + if ((r = transaction_add_job_and_dependencies(m, type, dep, ret, true, override, false, false, e, NULL)) < 0) { if (r != -EBADR) goto fail; @@ -1613,7 +1616,7 @@ static int transaction_add_isolate_jobs(Manager *m) { if (hashmap_get(m->transaction_jobs, u)) continue; - if ((r = transaction_add_job_and_dependencies(m, JOB_STOP, u, NULL, true, false, false, NULL, NULL)) < 0) + if ((r = transaction_add_job_and_dependencies(m, JOB_STOP, u, NULL, true, false, false, false, NULL, NULL)) < 0) log_warning("Cannot add isolate job for unit %s, ignoring: %s", u->meta.id, strerror(-r)); } @@ -1641,7 +1644,7 @@ int manager_add_job(Manager *m, JobType type, Unit *unit, JobMode mode, bool ove log_debug("Trying to enqueue job %s/%s/%s", unit->meta.id, job_type_to_string(type), job_mode_to_string(mode)); - if ((r = transaction_add_job_and_dependencies(m, type, unit, NULL, true, override, false, e, &ret)) < 0) { + if ((r = transaction_add_job_and_dependencies(m, type, unit, NULL, true, override, false, mode == JOB_IGNORE_DEPENDENCIES, e, &ret)) < 0) { transaction_abort(m); return r; } @@ -1820,7 +1823,7 @@ void manager_clear_jobs(Manager *m) { transaction_abort(m); while ((j = hashmap_first(m->jobs))) - job_free(j); + job_finish_and_invalidate(j, JOB_CANCELED); } unsigned manager_dispatch_run_queue(Manager *m) { @@ -2547,22 +2550,20 @@ void manager_dispatch_bus_query_pid_done( } int manager_open_serialization(Manager *m, FILE **_f) { - char *path; + char *path = NULL; mode_t saved_umask; int fd; FILE *f; assert(_f); - if (m->running_as == MANAGER_SYSTEM) { - mkdir_p("/dev/.systemd", 0755); + if (m->running_as == MANAGER_SYSTEM) + asprintf(&path, "/dev/.run/systemd/dump-%lu-XXXXXX", (unsigned long) getpid()); + else + asprintf(&path, "/tmp/systemd-dump-%lu-XXXXXX", (unsigned long) getpid()); - if (asprintf(&path, "/dev/.systemd/dump-%lu-XXXXXX", (unsigned long) getpid()) < 0) - return -ENOMEM; - } else { - if (asprintf(&path, "/tmp/systemd-dump-%lu-XXXXXX", (unsigned long) getpid()) < 0) - return -ENOMEM; - } + if (!path) + return -ENOMEM; saved_umask = umask(0077); fd = mkostemp(path, O_RDWR|O_CLOEXEC); @@ -2859,7 +2860,7 @@ void manager_run_generators(Manager *m) { if (!m->generator_unit_path) { char *p; - char system_path[] = "/dev/.systemd/generator-XXXXXX", + char system_path[] = "/dev/.run/systemd/generator-XXXXXX", user_path[] = "/tmp/systemd-generator-XXXXXX"; if (!(p = mkdtemp(m->running_as == MANAGER_SYSTEM ? system_path : user_path))) {