summaryrefslogtreecommitdiff
path: root/src/core/device.c
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2013-12-05 00:41:12 -0500
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2013-12-05 17:25:08 -0500
commite775289d56ace2f8d23e62ed79316d71332d6d05 (patch)
treeda94c1b1e3d14ea3cdef286a40405e7b871dcd66 /src/core/device.c
parenta809021a9c330236d520eb329cfb4d52a401e8a0 (diff)
systemd: add a start job for all units in SYSTEMD_[USER_]WANTS=
Diffstat (limited to 'src/core/device.c')
-rw-r--r--src/core/device.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/core/device.c b/src/core/device.c
index 4ff7c37238..19fc7451d8 100644
--- a/src/core/device.c
+++ b/src/core/device.c
@@ -264,6 +264,7 @@ static int device_update_unit(Manager *m, struct udev_device *dev, const char *p
FOREACH_WORD_QUOTED(w, l, wants, state) {
_cleanup_free_ char *n = NULL;
char e[l+1];
+ Unit *other;
memcpy(e, w, l);
e[l] = 0;
@@ -277,6 +278,15 @@ static int device_update_unit(Manager *m, struct udev_device *dev, const char *p
r = unit_add_dependency_by_name(u, UNIT_WANTS, n, NULL, true);
if (r < 0)
goto fail;
+
+ other = manager_get_unit(u->manager, n);
+ if (!other || !unit_can_start(other))
+ continue;
+
+ r = manager_add_job(u->manager, JOB_START, other, JOB_REPLACE, true, NULL, NULL);
+ if (r < 0)
+ log_warning("Failed to add job %s/%s, ignoring: %s.",
+ other->id, job_type_to_string(JOB_START), strerror(-r));
}
}
}