RFR: 6313903: Thread.sleep(3) might wake up immediately on windows

Robbin Ehn robbin.ehn at oracle.com
Tue Sep 3 08:24:01 UTC 2019


Hi David,

Looks good, thanks!

/Robbin

On 9/2/19 8:06 AM, David Holmes wrote:
> Bug: https://bugs.openjdk.java.net/browse/JDK-6313903
> webrev: http://cr.openjdk.java.net/~dholmes/6313903/webrev/
> 
> This is a fix to a very long term problem on Windows that really should have 
> been fixed many years ago: the Windows timed-wait routines can return early by 
> up to a clock tick** (which itself could be as long as 16ms). The fix for 
> Thread.sleep is to track the elapsed time (via nanoTime) and simply adjust and 
> repeat the sleep if we were going to return earlier than requested. This is the 
> same as what we have been doing on non-Windows for many years.
> 
> ** whether or not you observe this seems highly dependent on hardware - see bug 
> report for observed behaviours.
> 
> The additional motivation for fixing this now is to reduce the amount of 
> platform specific sleep/interrupt code and to allow changes to the shared 
> interrupt code. There are some additional RFE's in the pipeline for that.
> 
> This fix does the following:
> - moves the os_posix.cpp os::sleep implementation to os.cpp to be shared by all 
> platforms and deletes the os_windows.cpp os::sleep implementation
>    - there are some additional comments added and the JavaThread assertion is 
> moved to the head of the "interruptible" code path
> - updates os_windows.cpp in these additional ways:
>    - updates the commentary about creating the interrupt_event (which is now 
> only used by JDK library code for use by Process.waitFor)
>    - updates os::interrupt to also unpark the _SleepEvent
>    - moves the use of the HighResolutionInterval utility class from the 
> os::sleep code to the PlatformEvent::park code, so that sleep on Windows will 
> still make adjustments to the clock tick if needed (it also means that 
> Object.wait() calls will now make the same adjustments**).
> 
> ** This is a change behaviour but I'm not concerned about there being any 
> adverse effects from this. On many systems the code will have no affect as the 
> system will be using the 1ms clock tick all the time anyway (e.g. my laptops do 
> this). On systems with e.g. 15ms tick, what you will now see is Object.wait 
> returning on time rather than much later than requested e.g. before this fix a 
> timed-wait of 1ms returned in 15.14ms, but after the fix it was 2.3ms. (Note 
> that this observation seems contrary to the general statement that windows 
> timed-wait event operations can return early by up to a clock tick - as I said 
> it seems highly hardware dependent.)
> 
> Testing: tiers 1-3
>           custom testing to look at sleep and wait times, as per bug report.
> 
> Thanks,
> David
> -----


More information about the hotspot-runtime-dev mailing list