X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fcore%2Fjob.c;h=e5dcef7cf43d9f616665072f4e675028ecc711b3;hb=71fda00f320379f5cbee8e118848de98caaa229d;hp=9a425a6da1cdaf28e2ac5dd4f4852e6027be3fec;hpb=3ecaa09bccd8a59c9f1e06756a1334a162206dc4;p=elogind.git diff --git a/src/core/job.c b/src/core/job.c index 9a425a6da..e5dcef7cf 100644 --- a/src/core/job.c +++ b/src/core/job.c @@ -35,7 +35,7 @@ #include "log.h" #include "dbus-job.h" #include "special.h" -#include "sync.h" +#include "async.h" #include "virt.h" JobBusClient* job_bus_client_new(DBusConnection *connection, const char *name) { @@ -99,10 +99,10 @@ void job_free(Job *j) { assert(!j->object_list); if (j->in_run_queue) - LIST_REMOVE(Job, run_queue, j->manager->run_queue, j); + LIST_REMOVE(run_queue, j->manager->run_queue, j); if (j->in_dbus_queue) - LIST_REMOVE(Job, dbus_queue, j->manager->dbus_job_queue, j); + LIST_REMOVE(dbus_queue, j->manager->dbus_job_queue, j); if (j->timer_watch.type != WATCH_INVALID) { assert(j->timer_watch.type == WATCH_JOB_TIMER); @@ -114,7 +114,7 @@ void job_free(Job *j) { } while ((cl = j->bus_client_list)) { - LIST_REMOVE(JobBusClient, client, j->bus_client_list, cl); + LIST_REMOVE(client, j->bus_client_list, cl); free(cl); } free(j); @@ -267,9 +267,9 @@ JobDependency* job_dependency_new(Job *subject, Job *object, bool matters, bool l->conflicts = conflicts; if (subject) - LIST_PREPEND(JobDependency, subject, subject->subject_list, l); + LIST_PREPEND(subject, subject->subject_list, l); - LIST_PREPEND(JobDependency, object, object->object_list, l); + LIST_PREPEND(object, object->object_list, l); return l; } @@ -278,9 +278,9 @@ void job_dependency_free(JobDependency *l) { assert(l); if (l->subject) - LIST_REMOVE(JobDependency, subject, l->subject->subject_list, l); + LIST_REMOVE(subject, l->subject->subject_list, l); - LIST_REMOVE(JobDependency, object, l->object->object_list, l); + LIST_REMOVE(object, l->object->object_list, l); free(l); } @@ -491,7 +491,7 @@ int job_run_and_invalidate(Job *j) { assert(j->type < _JOB_TYPE_MAX_IN_TRANSACTION); assert(j->in_run_queue); - LIST_REMOVE(Job, run_queue, j->manager->run_queue, j); + LIST_REMOVE(run_queue, j->manager->run_queue, j); j->in_run_queue = false; if (j->state != JOB_WAITING) @@ -569,7 +569,7 @@ int job_run_and_invalidate(Job *j) { return r; } -static const char *job_get_status_message_format(Unit *u, JobType t, JobResult result) { +_pure_ static const char *job_get_status_message_format(Unit *u, JobType t, JobResult result) { const UnitStatusMessageFormats *format_table; assert(u); @@ -588,7 +588,7 @@ static const char *job_get_status_message_format(Unit *u, JobType t, JobResult r return NULL; } -static const char *job_get_status_message_format_try_harder(Unit *u, JobType t, JobResult result) { +_pure_ static const char *job_get_status_message_format_try_harder(Unit *u, JobType t, JobResult result) { const char *format; assert(u); @@ -910,7 +910,7 @@ void job_add_to_run_queue(Job *j) { if (j->in_run_queue) return; - LIST_PREPEND(Job, run_queue, j->manager->run_queue, j); + LIST_PREPEND(run_queue, j->manager->run_queue, j); j->in_run_queue = true; } @@ -925,7 +925,7 @@ void job_add_to_dbus_queue(Job *j) { * job might just have been created and not yet assigned to a * connection/client. */ - LIST_PREPEND(Job, dbus_queue, j->manager->dbus_job_queue, j); + LIST_PREPEND(dbus_queue, j->manager->dbus_job_queue, j); j->in_dbus_queue = true; } @@ -1088,10 +1088,13 @@ void job_shutdown_magic(Job *j) { * asynchronous sync() would cause their exit to be * delayed. */ - if (!unit_has_name(j->unit, SPECIAL_SHUTDOWN_TARGET)) + if (j->type != JOB_START) return; - if (j->type != JOB_START) + if (j->unit->manager->running_as != SYSTEMD_SYSTEM) + return; + + if (!unit_has_name(j->unit, SPECIAL_SHUTDOWN_TARGET)) return; if (detect_container(NULL) > 0)