From 23bea0c4486ee30b10d1d00a50244de49b970112 Mon Sep 17 00:00:00 2001 From: Remi Gacogne Date: Tue, 20 Aug 2024 15:14:45 +0200 Subject: [PATCH] dnsdist: Take nanoseconds into account in `DynBlock`'s `until` accessor --- pdns/dnsdistdist/dnsdist-lua-inspection.cc | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/pdns/dnsdistdist/dnsdist-lua-inspection.cc b/pdns/dnsdistdist/dnsdist-lua-inspection.cc index b9828e0e8a..cba8e03e4e 100644 --- a/pdns/dnsdistdist/dnsdist-lua-inspection.cc +++ b/pdns/dnsdistdist/dnsdist-lua-inspection.cc @@ -1054,7 +1054,21 @@ void setupLuaInspection(LuaContext& luaCtx) gettime(&nowMonotonic); timespec nowRealTime{}; gettime(&nowRealTime, true); - nowRealTime.tv_sec += (block.until.tv_sec - nowMonotonic.tv_sec); + + auto seconds = block.until.tv_sec - nowMonotonic.tv_sec; + auto nseconds = block.until.tv_nsec - nowMonotonic.tv_nsec; + if (nseconds < 0) { + seconds -= 1; + nseconds += 1000000000; + } + + nowRealTime.tv_sec += seconds; + nowRealTime.tv_nsec += nseconds; + if (nowRealTime.tv_nsec > 1000000000) { + nowRealTime.tv_sec += 1; + nowRealTime.tv_nsec -= 1000000000; + } + return nowRealTime; }, [](DynBlock& block, [[maybe_unused]] timespec until) {}); luaCtx.registerMember( "blocks", [](const DynBlock& block) { return block.blocks.load(); }, [](DynBlock& block, [[maybe_unused]] unsigned int blocks) {}); -- 2.47.2