]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
daemon/defer: update uv time after longer operations docs-develop-defe-x6j6qe/deployments/6004
authorLukáš Ondráček <lukas.ondracek@nic.cz>
Thu, 9 Jan 2025 16:38:21 +0000 (17:38 +0100)
committerLukáš Ondráček <lukas.ondracek@nic.cz>
Thu, 9 Jan 2025 16:38:21 +0000 (17:38 +0100)
daemon/defer.c
daemon/defer.h

index 5a7df24c8640707ce16ee87dbbab36d1577e3c05..b1abcacd57deec602e2a64b3b16d1c11fc76c2f0 100644 (file)
@@ -69,6 +69,7 @@ struct defer {
 };
 struct defer *defer = NULL;
 bool defer_initialized = false;
+uint64_t defer_uvtime_stamp = 0;
 struct mmapped defer_mmapped = {0};
 
 defer_sample_state_t defer_sample_state = {
index 06c9d56dac9a7982156ceabd48976e3915e17698..c5ae26c5058e5b39919cca9d6751d3f338eb1ee5 100644 (file)
@@ -30,7 +30,7 @@ extern defer_sample_state_t defer_sample_state;
 
 extern struct defer *defer;  /// skip sampling/deferring if NULL
 extern bool defer_initialized; /// defer_init was called, possibly keeping defer disabled
-
+extern uint64_t defer_uvtime_stamp; /// stamp of the last uv time update
 
 // TODO: reconsider `static inline` cases below
 
@@ -39,7 +39,12 @@ static inline uint64_t defer_get_stamp(void)
 {
        struct timespec now_ts = {0};
        clock_gettime(CLOCK_THREAD_CPUTIME_ID, &now_ts);
-       return now_ts.tv_nsec + 1000*1000*1000 * (uint64_t)now_ts.tv_sec;
+       uint64_t stamp = now_ts.tv_nsec + 1000*1000*1000 * (uint64_t)now_ts.tv_sec;
+       if (defer_uvtime_stamp + 1000*1000 < stamp) {
+               defer_uvtime_stamp = stamp;
+               uv_update_time(uv_default_loop());
+       }
+       return stamp;
 }
 
 /// Annotate the work currently being accounted by an IP address.