From 0c7e13f0cd670cdad4ca18f1f6868a02a5c4c434 Mon Sep 17 00:00:00 2001 From: KonstantinKondrashov Date: Mon, 8 Jun 2020 22:57:38 +0800 Subject: [PATCH] newlib: Fix adjtime, returns the amount of time remaining from any previous adjustment If the olddelta argument is not a null pointer, the adjtime function returns information about any previous time adjustment that has not yet completed. Closes: https://github.com/espressif/esp-idf/issues/5194 --- components/newlib/time.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/components/newlib/time.c b/components/newlib/time.c index b62c69999..618d383d6 100644 --- a/components/newlib/time.c +++ b/components/newlib/time.c @@ -193,6 +193,18 @@ static void adjtime_corr_stop (void) int adjtime(const struct timeval *delta, struct timeval *outdelta) { #if defined( WITH_FRC ) || defined( WITH_RTC ) + if(outdelta != NULL){ + _lock_acquire(&s_adjust_time_lock); + adjust_boot_time(); + if (adjtime_start != 0) { + outdelta->tv_sec = adjtime_total_correction / 1000000L; + outdelta->tv_usec = adjtime_total_correction % 1000000L; + } else { + outdelta->tv_sec = 0; + outdelta->tv_usec = 0; + } + _lock_release(&s_adjust_time_lock); + } if(delta != NULL){ int64_t sec = delta->tv_sec; int64_t usec = delta->tv_usec; @@ -211,18 +223,6 @@ int adjtime(const struct timeval *delta, struct timeval *outdelta) adjtime_total_correction = sec * 1000000L + usec; _lock_release(&s_adjust_time_lock); } - if(outdelta != NULL){ - _lock_acquire(&s_adjust_time_lock); - adjust_boot_time(); - if (adjtime_start != 0) { - outdelta->tv_sec = adjtime_total_correction / 1000000L; - outdelta->tv_usec = adjtime_total_correction % 1000000L; - } else { - outdelta->tv_sec = 0; - outdelta->tv_usec = 0; - } - _lock_release(&s_adjust_time_lock); - } return 0; #else return -1;