summaryrefslogtreecommitdiffstats
path: root/vespajlib
diff options
context:
space:
mode:
Diffstat (limited to 'vespajlib')
-rw-r--r--vespajlib/src/main/java/com/yahoo/concurrent/SystemTimer.java23
-rw-r--r--vespajlib/src/main/java/com/yahoo/concurrent/Timer.java14
2 files changed, 13 insertions, 24 deletions
diff --git a/vespajlib/src/main/java/com/yahoo/concurrent/SystemTimer.java b/vespajlib/src/main/java/com/yahoo/concurrent/SystemTimer.java
index 8111d52a10f..c2fca806a85 100644
--- a/vespajlib/src/main/java/com/yahoo/concurrent/SystemTimer.java
+++ b/vespajlib/src/main/java/com/yahoo/concurrent/SystemTimer.java
@@ -42,21 +42,18 @@ public enum SystemTimer implements Timer {
SystemTimer() {
long napTime = adjustTimeoutByDetectedHz(Duration.ofMillis(1)).toMillis();
- millis = TimeUnit.NANOSECONDS.toMillis(System.nanoTime());
- Thread thread = new Thread() {
-
- @Override
- public void run() {
- while (true) {
- millis = TimeUnit.NANOSECONDS.toMillis(System.nanoTime());
- try {
- Thread.sleep(napTime);
- } catch (InterruptedException e) {
- break;
- }
+ long creationNanos = System.nanoTime();
+ millis = TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - creationNanos);
+ Thread thread = new Thread(() -> {
+ while (true) {
+ millis = TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - creationNanos);
+ try {
+ Thread.sleep(napTime);
+ } catch (InterruptedException e) {
+ break;
}
}
- };
+ });
thread.setDaemon(true);
thread.setName("vespa-system-timer");
thread.start();
diff --git a/vespajlib/src/main/java/com/yahoo/concurrent/Timer.java b/vespajlib/src/main/java/com/yahoo/concurrent/Timer.java
index c41c762c989..9328039aae6 100644
--- a/vespajlib/src/main/java/com/yahoo/concurrent/Timer.java
+++ b/vespajlib/src/main/java/com/yahoo/concurrent/Timer.java
@@ -20,16 +20,8 @@ public interface Timer {
* @return The current value of the timer, in milliseconds.
*/
long milliTime();
- Timer monotonic = () -> TimeUnit.NANOSECONDS.toMillis(System.nanoTime());
- static Timer wrap(Clock original) {
- return new Timer() {
- private final Clock clock = original;
-
- @Override
- public long milliTime() {
- return clock.millis();
- }
- }; }
-
+ long creationNanos = System.nanoTime(); // Avoid monotonic timer overflow for the first 146 years of JVM uptime.
+ Timer monotonic = () -> TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - creationNanos);
+ static Timer wrap(Clock original) { return original::millis; }
default Instant instant() { return Instant.ofEpochMilli(milliTime()); }
}