[systemd-commits] src/main.c src/manager.c src/manager.h

Michal Schmidt michich at kemper.freedesktop.org
Thu Feb 2 04:40:47 PST 2012


 src/main.c    |    5 ++++-
 src/manager.c |    2 +-
 src/manager.h |    1 +
 3 files changed, 6 insertions(+), 2 deletions(-)

New commits:
commit bacbccb78cec45c4759ef4291375605284248eb0
Author: Michal Schmidt <mschmidt at redhat.com>
Date:   Thu Feb 2 12:39:33 2012 +0100

    manager: tell correctly if the manager is booting
    
    The assumption that the initial job is the job with id==1 is incorrect.
    Some jobs may be enqueued before the job that starts the default unit as
    in this example:
    
     -.mount changed dead -> mounted
     Trying to enqueue job quotacheck.service/start/fail
     Installed new job quotacheck.service/start as 1
     Installed new job systemd-stdout-syslog-bridge.socket/start as 2
     Enqueued job quotacheck.service/start as 1
     Trying to enqueue job quotaon.service/start/fail
     Installed new job quotaon.service/start as 5
     Enqueued job quotaon.service/start as 5
     Activating default unit: default.target
     Trying to enqueue job graphical.target/start/replace
    
    This fixes a bug where displaying of boot status messages was turned off
    too early.

diff --git a/src/main.c b/src/main.c
index 738db6c..18cc74a 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1404,6 +1404,7 @@ int main(int argc, char *argv[]) {
         } else {
                 DBusError error;
                 Unit *target = NULL;
+                Job *default_unit_job;
 
                 dbus_error_init(&error);
 
@@ -1440,11 +1441,13 @@ int main(int argc, char *argv[]) {
                         manager_dump_units(m, stdout, "\t");
                 }
 
-                if ((r = manager_add_job(m, JOB_START, target, JOB_REPLACE, false, &error, NULL)) < 0) {
+                r = manager_add_job(m, JOB_START, target, JOB_REPLACE, false, &error, &default_unit_job);
+                if (r < 0) {
                         log_error("Failed to start default target: %s", bus_error(&error, r));
                         dbus_error_free(&error);
                         goto finish;
                 }
+                m->default_unit_job_id = default_unit_job->id;
 
                 after_startup = now(CLOCK_MONOTONIC);
                 log_full(arg_action == ACTION_TEST ? LOG_INFO : LOG_DEBUG,
diff --git a/src/manager.c b/src/manager.c
index 19e5441..74bd740 100644
--- a/src/manager.c
+++ b/src/manager.c
@@ -2943,7 +2943,7 @@ bool manager_is_booting_or_shutting_down(Manager *m) {
         assert(m);
 
         /* Is the initial job still around? */
-        if (manager_get_job(m, 1))
+        if (manager_get_job(m, m->default_unit_job_id))
                 return true;
 
         /* Is there a job for the shutdown target? */
diff --git a/src/manager.h b/src/manager.h
index 5e65fdb..a9d08f0 100644
--- a/src/manager.h
+++ b/src/manager.h
@@ -183,6 +183,7 @@ struct Manager {
         int32_t subscribed_data_slot;
 
         uint32_t current_job_id;
+        uint32_t default_unit_job_id;
 
         /* Data specific to the Automount subsystem */
         int dev_autofs_fd;



More information about the systemd-commits mailing list