]> source.dussan.org Git - tigervnc.git/commitdiff
Fix overflow; "Timer: gettimeofday is broken"
authorPierre Ossman <ossman@cendio.se>
Fri, 19 Jul 2024 15:37:04 +0000 (17:37 +0200)
committerSamuel Mannehed <samuel@cendio.se>
Fri, 19 Jul 2024 15:39:06 +0000 (17:39 +0200)
The rounding misbehaved when the tv_usec calculation overflows.

Fixes issue #1782.

common/rfb/Timer.cxx

index 4654d50c8dec5775d8bfa8c6bc1de39ed1db4b27..fbc9bae95e4043f66bb14a1630ac7fb025246afd 100644 (file)
@@ -54,7 +54,10 @@ inline static timeval addMillis(timeval inTime, int millis) {
 }
 
 inline static int diffTimeMillis(timeval later, timeval earlier) {
-  return ((later.tv_sec - earlier.tv_sec) * 1000) + ((later.tv_usec - earlier.tv_usec + 999) / 1000);
+  long udiff;
+  udiff = ((later.tv_sec - earlier.tv_sec) * 1000000) +
+          (later.tv_usec - earlier.tv_usec);
+  return (udiff + 999) / 1000;
 }
 
 std::list<Timer*> Timer::pending;