diff --git a/src/java.base/share/classes/java/util/Timer.java b/src/java.base/share/classes/java/util/Timer.java index f29e1955bfc..a78ac662d38 100644 --- a/src/java.base/share/classes/java/util/Timer.java +++ b/src/java.base/share/classes/java/util/Timer.java @@ -588,7 +588,9 @@ private void mainLoop() { // A zero checkpointRestoreTimeDelta value indicates no Checkpoint performed yet, // it can't be negative, otherwise a RestoreException already was thrown. if (checkpointRestoreTimeDelta > 0) { + // Ensure the time compensation in milliseconds is not less than the checkpoint restore time delta. task.nextExecutionTime += (checkpointRestoreTimeDelta / 1000000); + task.nextExecutionTime += ((checkpointRestoreTimeDelta % 1000000 == 0) ? 0 : 1); // clear the flag - only one time adjustment required task.criuAdjustRequired = false; }