chiark / gitweb /
dbus: fix serialization of calendar timers
[elogind.git] / src / core / unit.c
index 1e33936346573bcb866513cd54dc8cdc471ded4f..45453dce64a6464899721ad5f7c133fcac4e418f 100644 (file)
@@ -613,7 +613,7 @@ int unit_add_exec_dependencies(Unit *u, ExecContext *c) {
         /* If syslog or kernel logging is requested, make sure our own
          * logging daemon is run first. */
 
-        if (u->manager->running_as == MANAGER_SYSTEM)
+        if (u->manager->running_as == SYSTEMD_SYSTEM)
                 if ((r = unit_add_two_dependencies_by_name(u, UNIT_REQUIRES, UNIT_AFTER, SPECIAL_JOURNALD_SOCKET, NULL, true)) < 0)
                         return r;
 
@@ -1023,7 +1023,7 @@ static void unit_status_log_starting_stopping_reloading(Unit *u, JobType t) {
                                SD_MESSAGE_UNIT_RELOADING;
 
         log_struct(LOG_INFO,
-                   "MESSAGE_ID=" SD_ID128_FORMAT_STR, SD_ID128_FORMAT_VAL(mid),
+                   MESSAGE_ID(mid),
                    "UNIT=%s", u->id,
                    "MESSAGE=%s", buf,
                    NULL);
@@ -1438,7 +1438,10 @@ void unit_notify(Unit *u, UnitActiveState os, UnitActiveState ns, bool reload_su
                         check_unneeded_dependencies(u);
 
                 if (ns != os && ns == UNIT_FAILED) {
-                        log_notice("Unit %s entered failed state.", u->id);
+                        log_struct(LOG_NOTICE,
+                                   "MESSAGE=Unit %s entered failed state", u->id,
+                                   "UNIT=%s", u->id,
+                                   NULL);
                         unit_trigger_on_failure(u);
                 }
         }
@@ -1557,7 +1560,7 @@ void unit_unwatch_pid(Unit *u, pid_t pid) {
         hashmap_remove_value(u->manager->watch_pids, LONG_TO_PTR(pid), u);
 }
 
-int unit_watch_timer(Unit *u, usec_t delay, Watch *w) {
+int unit_watch_timer(Unit *u, clockid_t clock_id, bool relative, usec_t usec, Watch *w) {
         struct itimerspec its;
         int flags, fd;
         bool ours;
@@ -1577,14 +1580,15 @@ int unit_watch_timer(Unit *u, usec_t delay, Watch *w) {
         } else if (w->type == WATCH_INVALID) {
 
                 ours = true;
-                if ((fd = timerfd_create(CLOCK_MONOTONIC, TFD_NONBLOCK|TFD_CLOEXEC)) < 0)
+                fd = timerfd_create(clock_id, TFD_NONBLOCK|TFD_CLOEXEC);
+                if (fd < 0)
                         return -errno;
         } else
                 assert_not_reached("Invalid watch type");
 
         zero(its);
 
-        if (delay <= 0) {
+        if (usec <= 0) {
                 /* Set absolute time in the past, but not 0, since we
                  * don't want to disarm the timer */
                 its.it_value.tv_sec = 0;
@@ -1592,8 +1596,8 @@ int unit_watch_timer(Unit *u, usec_t delay, Watch *w) {
 
                 flags = TFD_TIMER_ABSTIME;
         } else {
-                timespec_store(&its.it_value, delay);
-                flags = 0;
+                timespec_store(&its.it_value, usec);
+                flags = relative ? 0 : TFD_TIMER_ABSTIME;
         }
 
         /* This will also flush the elapse counter */
@@ -2590,7 +2594,7 @@ UnitFileState unit_get_unit_file_state(Unit *u) {
 
         if (u->unit_file_state < 0 && u->fragment_path)
                 u->unit_file_state = unit_file_get_state(
-                                u->manager->running_as == MANAGER_SYSTEM ? UNIT_FILE_SYSTEM : UNIT_FILE_USER,
+                                u->manager->running_as == SYSTEMD_SYSTEM ? UNIT_FILE_SYSTEM : UNIT_FILE_USER,
                                 NULL, path_get_file_name(u->fragment_path));
 
         return u->unit_file_state;
@@ -2673,7 +2677,7 @@ int unit_exec_context_defaults(Unit *u, ExecContext *c) {
                                 return -ENOMEM;
                 }
 
-        if (u->manager->running_as == MANAGER_USER &&
+        if (u->manager->running_as == SYSTEMD_USER &&
             !c->working_directory) {
 
                 r = get_home_dir(&c->working_directory);