summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2018-05-29 12:55:33 +0200
committerLennart Poettering <lennart@poettering.net>2018-06-06 10:55:45 +0200
commit4f811d27d6d9324e65ce628fa20ac1761ef98de0 (patch)
treeb2673f25c2e521455ec92a2440cf1e86370ca1df /src/core
parentbbf5fd8e41b1abdf03c8ab463a2c9af7c7dc64d8 (diff)
downloadsystemd-4f811d27d6d9324e65ce628fa20ac1761ef98de0.tar.gz
time-util: introduce common implementation of TFD_TIMER_CANCEL_ON_SET client code
We now use pretty much the same code at three places, let's unify that.
Diffstat (limited to 'src/core')
-rw-r--r--src/core/manager.c20
1 files changed, 2 insertions, 18 deletions
diff --git a/src/core/manager.c b/src/core/manager.c
index 0f767d651c..d2f628d2bb 100644
--- a/src/core/manager.c
+++ b/src/core/manager.c
@@ -353,14 +353,7 @@ static void manager_close_idle_pipe(Manager *m) {
static int manager_setup_time_change(Manager *m) {
int r;
- /* We only care for the cancellation event, hence we set the
- * timeout to the latest possible value. */
- struct itimerspec its = {
- .it_value.tv_sec = TIME_T_MAX,
- };
-
assert(m);
- assert_cc(sizeof(time_t) == sizeof(TIME_T_MAX));
if (m->test_run_flags)
return 0;
@@ -368,18 +361,9 @@ static int manager_setup_time_change(Manager *m) {
m->time_change_event_source = sd_event_source_unref(m->time_change_event_source);
m->time_change_fd = safe_close(m->time_change_fd);
- /* Uses TFD_TIMER_CANCEL_ON_SET to get notifications whenever
- * CLOCK_REALTIME makes a jump relative to CLOCK_MONOTONIC */
-
- m->time_change_fd = timerfd_create(CLOCK_REALTIME, TFD_NONBLOCK|TFD_CLOEXEC);
+ m->time_change_fd = time_change_fd();
if (m->time_change_fd < 0)
- return log_error_errno(errno, "Failed to create timerfd: %m");
-
- if (timerfd_settime(m->time_change_fd, TFD_TIMER_ABSTIME|TFD_TIMER_CANCEL_ON_SET, &its, NULL) < 0) {
- log_debug_errno(errno, "Failed to set up TFD_TIMER_CANCEL_ON_SET, ignoring: %m");
- m->time_change_fd = safe_close(m->time_change_fd);
- return 0;
- }
+ return log_error_errno(m->time_change_fd, "Failed to create timer change timer fd: %m");
r = sd_event_add_io(m->event, &m->time_change_event_source, m->time_change_fd, EPOLLIN, manager_dispatch_time_change_fd, m);
if (r < 0)