chiark / gitweb /
job: convert job type as early as we can, to simplify things a bit
authorLennart Poettering <lennart@poettering.net>
Tue, 8 Mar 2011 00:43:41 +0000 (01:43 +0100)
committerLennart Poettering <lennart@poettering.net>
Tue, 8 Mar 2011 00:53:47 +0000 (01:53 +0100)
TODO
src/job.c

diff --git a/TODO b/TODO
index a2c1a36..0a2f761 100644 (file)
--- a/TODO
+++ b/TODO
@@ -14,11 +14,19 @@ F15:
 
 * hook emergency.target into local-fs.target in some way as OnFailure with isolate
 
-* libudev is borked regarding tags
+* introduce simple way to do mandatory conditions (make current conditions mandatory, and introduce =| as non-mandatory conditions)
+
+* mount /dev/.run and /var/run as bind mounts
+
+* Make use of UnknownInterface, UnknownObject
+
+* verify SYSTEMD_IGNORE_DEPENDENCIES support in /etc/rc.d/functions
 
 Features:
 
-* mount /dev/.run and /var/run as bind mounts
+* consider services with no [Install] section and stored in /lib enabled by "systemctl is-enabled"
+
+* consider services with any kind of link in /etc/systemd/system enabled
 
 * introduce "x-systemd-automount" as alternative to the "comment=systemd.automount" mount option
 
@@ -30,18 +38,12 @@ Features:
   document it? When doing that add switch to make this temporary by
   placing mask links in /dev.
 
-* introduce simple way to do mandatory conditions (make current conditions mandatory, and introduce =| as non-mandatory conditions)
-
 * detect LXC environment
 
 * invoke vhangup() before and after invoking getty
 
 * support "auto" and "comment=systemd.automount" at the same time for an fstab entry
 
-* Make use of UnknownInterface, UnknownObject
-
-* look up crypto partition mount points via fstab to show to the user when prompting for a password
-
 * Maybe store in unit files whether a service should be enabled by default on package installation
 
 * perhaps add "systemctl reenable" as combination of "systemctl disable" and "systemctl enable"
index 54bd414..206490f 100644 (file)
--- a/src/job.c
+++ b/src/job.c
@@ -422,10 +422,16 @@ int job_run_and_invalidate(Job *j) {
                         break;
 
                 case JOB_RELOAD_OR_START:
-                        if (unit_active_state(j->unit) == UNIT_ACTIVE)
+                        if (unit_active_state(j->unit) == UNIT_ACTIVE) {
+                                j->type = JOB_RELOAD;
                                 r = unit_reload(j->unit);
-                        else
+                        } else {
+                                j->type = JOB_START;
                                 r = unit_start(j->unit);
+
+                                if (r == -EBADR)
+                                        r = 0;
+                        }
                         break;
 
                 case JOB_RESTART: {
@@ -445,8 +451,10 @@ int job_run_and_invalidate(Job *j) {
                         else if (t == UNIT_ACTIVATING) {
                                 j->type = JOB_START;
                                 r = unit_start(j->unit);
-                        } else
+                        } else {
+                                j->type = JOB_RESTART;
                                 r = unit_stop(j->unit);
+                        }
                         break;
                 }