diff --git a/src/common/util.c b/src/common/util.c
index 743df0bbb1601161aa444ebfc1c9a501025c30ed..600a8e614d83d3f2ef66d06aa7b1cafafbb4203d 100644
--- a/src/common/util.c
+++ b/src/common/util.c
@@ -23,16 +23,18 @@ long
 tv_udiff(struct timeval *start, struct timeval *end)
 {
   long udiff;
+  long end_usec = end->tv_usec;
   long secdiff = end->tv_sec - start->tv_sec;
+
   if (secdiff+1 > LONG_MAX/1000000) {
     log(LOG_NOTICE, "tv_udiff(): comparing times too far apart.");
     return LONG_MAX;
   }
-  if (end->tv_usec < start->tv_usec) {
-    end->tv_sec--;
-    end->tv_usec += 1000000L;
+  if (end_usec < start->tv_usec) {
+    secdiff--;
+    end_usec += 1000000L;
   }
-  udiff = secdiff*1000000L + (end->tv_usec - start->tv_usec);
+  udiff = secdiff*1000000L + (end_usec - start->tv_usec);
   if(udiff < 0) {
     log(LOG_NOTICE, "tv_udiff(): start is after end. Returning 0.");
     return 0;