Zbigniew Jędrzejewski-Szmek 98947a
From 043a559ff3732439fc61872a6320ee0a05dd088f Mon Sep 17 00:00:00 2001
Zbigniew Jędrzejewski-Szmek 98947a
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Zbigniew Jędrzejewski-Szmek 98947a
Date: Thu, 5 Dec 2013 00:41:12 -0500
Zbigniew Jędrzejewski-Szmek 98947a
Subject: [PATCH] systemd: add a start job for all units specified with
Zbigniew Jędrzejewski-Szmek 98947a
 SYSTEMD_WANTS=
Zbigniew Jędrzejewski-Szmek 98947a
Zbigniew Jędrzejewski-Szmek 98947a
---
Zbigniew Jędrzejewski-Szmek 98947a
 src/core/device.c | 14 +++++++++++---
Zbigniew Jędrzejewski-Szmek 98947a
 1 file changed, 11 insertions(+), 3 deletions(-)
Zbigniew Jędrzejewski-Szmek 98947a
Zbigniew Jędrzejewski-Szmek 98947a
diff --git a/src/core/device.c b/src/core/device.c
Zbigniew Jędrzejewski-Szmek 98947a
index 5397bd6..610fe88 100644
Zbigniew Jędrzejewski-Szmek 98947a
--- a/src/core/device.c
Zbigniew Jędrzejewski-Szmek 98947a
+++ b/src/core/device.c
Zbigniew Jędrzejewski-Szmek 98947a
@@ -281,7 +281,8 @@ static int device_update_unit(Manager *m, struct udev_device *dev, const char *p
Zbigniew Jędrzejewski-Szmek 98947a
                         size_t l;
Zbigniew Jędrzejewski-Szmek 98947a
 
Zbigniew Jędrzejewski-Szmek 98947a
                         FOREACH_WORD_QUOTED(w, l, wants, state) {
Zbigniew Jędrzejewski-Szmek 98947a
-                                char *e, *n;
Zbigniew Jędrzejewski-Szmek 98947a
+                                _cleanup_free_ char *e, *n = NULL;
Zbigniew Jędrzejewski-Szmek 98947a
+                                Unit *other;
Zbigniew Jędrzejewski-Szmek 98947a
 
Zbigniew Jędrzejewski-Szmek 98947a
                                 e = strndup(w, l);
Zbigniew Jędrzejewski-Szmek 98947a
                                 if (!e) {
Zbigniew Jędrzejewski-Szmek 98947a
@@ -293,12 +294,19 @@ static int device_update_unit(Manager *m, struct udev_device *dev, const char *p
Zbigniew Jędrzejewski-Szmek 98947a
                                         r = -ENOMEM;
Zbigniew Jędrzejewski-Szmek 98947a
                                         goto fail;
Zbigniew Jędrzejewski-Szmek 98947a
                                 }
Zbigniew Jędrzejewski-Szmek 98947a
-                                free(e);
Zbigniew Jędrzejewski-Szmek 98947a
 
Zbigniew Jędrzejewski-Szmek 98947a
                                 r = unit_add_dependency_by_name(u, UNIT_WANTS, n, NULL, true);
Zbigniew Jędrzejewski-Szmek 98947a
-                                free(n);
Zbigniew Jędrzejewski-Szmek 98947a
                                 if (r < 0)
Zbigniew Jędrzejewski-Szmek 98947a
                                         goto fail;
Zbigniew Jędrzejewski-Szmek 98947a
+
Zbigniew Jędrzejewski-Szmek 98947a
+                                other = manager_get_unit(u->manager, n);
Zbigniew Jędrzejewski-Szmek 98947a
+                                if (!other || !unit_can_start(other))
Zbigniew Jędrzejewski-Szmek 98947a
+                                        continue;
Zbigniew Jędrzejewski-Szmek 98947a
+
Zbigniew Jędrzejewski-Szmek 98947a
+                                r = manager_add_job(u->manager, JOB_START, other, JOB_REPLACE, true, NULL, NULL);
Zbigniew Jędrzejewski-Szmek 98947a
+                                if (r < 0)
Zbigniew Jędrzejewski-Szmek 98947a
+                                        log_warning("Failed to add job %s/%s, ignoring: %s.",
Zbigniew Jędrzejewski-Szmek 98947a
+                                                    other->id, job_type_to_string(JOB_START), strerror(-r));
Zbigniew Jędrzejewski-Szmek 98947a
                         }
Zbigniew Jędrzejewski-Szmek 98947a
                 }
Zbigniew Jędrzejewski-Szmek 98947a
         }