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);
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);
}
}
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;
} 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;
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 */