From a995aa6cd1cd89c2ca6db72b060177eaf7065377 Mon Sep 17 00:00:00 2001 From: Naoto Sato Date: Thu, 29 Jun 2023 16:15:02 +0000 Subject: [PATCH] 8310232: java.time.Clock$TickClock.millis() fails in runtime when tick is 1 microsecond Reviewed-by: iris, rriggs, jpai --- src/java.base/share/classes/java/time/Clock.java | 4 ++-- test/jdk/java/time/test/java/time/TestClock_Tick.java | 10 +++++++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/java.base/share/classes/java/time/Clock.java b/src/java.base/share/classes/java/time/Clock.java index df9dd709ea6..731a117fcea 100644 --- a/src/java.base/share/classes/java/time/Clock.java +++ b/src/java.base/share/classes/java/time/Clock.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -759,7 +759,7 @@ public abstract class Clock implements InstantSource { @Override public long millis() { long millis = baseClock.millis(); - return millis - Math.floorMod(millis, tickNanos / 1000_000L); + return tickNanos < 1000_000L ? millis : millis - Math.floorMod(millis, tickNanos / 1000_000L); } @Override public Instant instant() { diff --git a/test/jdk/java/time/test/java/time/TestClock_Tick.java b/test/jdk/java/time/test/java/time/TestClock_Tick.java index 0e8fdca4e05..53e27541764 100644 --- a/test/jdk/java/time/test/java/time/TestClock_Tick.java +++ b/test/jdk/java/time/test/java/time/TestClock_Tick.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -94,4 +94,12 @@ public class TestClock_Tick { assertEquals(test.toString(), "TickClock[SystemClock[Z],PT0.5S]"); } + //----------------------------------------------------------------------- + // Ensure divide-by-zero will not be thrown + // @bug 8310232 + public void test_millis() { + var test = Clock.tick(Clock.systemUTC(), Duration.ofNanos(1000)); + test.millis(); + } + }