diff --git a/src/timesync/timesyncd-manager.c b/src/timesync/timesyncd-manager.c index 8315169ba7..a361d60c63 100644 --- a/src/timesync/timesyncd-manager.c +++ b/src/timesync/timesyncd-manager.c @@ -1184,22 +1184,24 @@ int manager_setup_save_time_event(Manager *m) { int r; assert(m); - assert(!m->event_save_time); if (m->save_time_interval_usec == USEC_INFINITY) return 0; /* NB: we'll accumulate scheduling latencies here, but this doesn't matter */ - r = sd_event_add_time_relative( - m->event, &m->event_save_time, + r = event_reset_time_relative( + m->event, + &m->event_save_time, CLOCK_BOOTTIME, m->save_time_interval_usec, 10 * USEC_PER_SEC, - manager_save_time_handler, m); + manager_save_time_handler, + m, + SD_EVENT_PRIORITY_NORMAL, + "save-time", + /* force_reset = */ false); if (r < 0) - return log_error_errno(r, "Failed to add save time event: %m"); - - (void) sd_event_source_set_description(m->event_save_time, "save-time"); + return log_error_errno(r, "Failed to reset event source for saving time: %m"); return 0; } @@ -1213,23 +1215,11 @@ static int manager_save_time_and_rearm(Manager *m, usec_t t) { * clock, but otherwise uses the specified timestamp. Note that whenever we acquire an NTP sync the * specified timestamp value might be more accurate than the system clock, since the latter is * subject to slow adjustments. */ - r = touch_file(TIMESYNCD_CLOCK_FILE, false, t, UID_INVALID, GID_INVALID, MODE_INVALID); + r = touch_file(TIMESYNCD_CLOCK_FILE, /* parents = */ false, t, UID_INVALID, GID_INVALID, MODE_INVALID); if (r < 0) log_debug_errno(r, "Failed to update "TIMESYNCD_CLOCK_FILE", ignoring: %m"); - m->save_on_exit = true; - - if (m->save_time_interval_usec != USEC_INFINITY) { - r = sd_event_source_set_time_relative(m->event_save_time, m->save_time_interval_usec); - if (r < 0) - return log_error_errno(r, "Failed to rearm save time event: %m"); - - r = sd_event_source_set_enabled(m->event_save_time, SD_EVENT_ONESHOT); - if (r < 0) - return log_error_errno(r, "Failed to enable save time event: %m"); - } - - return 0; + return manager_setup_save_time_event(m); } static const char* ntp_server_property_name[_SERVER_TYPE_MAX] = { diff --git a/src/timesync/timesyncd-manager.h b/src/timesync/timesyncd-manager.h index 68fc8f8853..43dbef9417 100644 --- a/src/timesync/timesyncd-manager.h +++ b/src/timesync/timesyncd-manager.h @@ -112,7 +112,6 @@ struct Manager { /* save time event */ sd_event_source *event_save_time; usec_t save_time_interval_usec; - bool save_on_exit; /* Used to coalesce bus PropertiesChanged events */ sd_event_source *deferred_ntp_server_event_source; diff --git a/src/timesync/timesyncd.c b/src/timesync/timesyncd.c index d002501d29..c9628169dc 100644 --- a/src/timesync/timesyncd.c +++ b/src/timesync/timesyncd.c @@ -221,12 +221,10 @@ static int run(int argc, char *argv[]) { if (r < 0) return log_error_errno(r, "Failed to run event loop: %m"); - /* if we got an authoritative time, store it in the file system */ - if (m->save_on_exit) { - r = touch(TIMESYNCD_CLOCK_FILE); - if (r < 0) - log_debug_errno(r, "Failed to touch "TIMESYNCD_CLOCK_FILE", ignoring: %m"); - } + /* Save the current time in the file system on exit. */ + r = touch(TIMESYNCD_CLOCK_FILE); + if (r < 0) + log_debug_errno(r, "Failed to touch "TIMESYNCD_CLOCK_FILE", ignoring: %m"); return 0; }