On Mon, 25 Jan 2021 04:46:52 GMT, David Holmes <dhol...@openjdk.org> wrote:

>> We are now confident that we have build-time and runtime support for 
>> clock_gettime and CLOCK_MONOTONIC on all our OpenJDK supported POSIX 
>> platforms - see bug report for some more details on different OS. 
>> Consequently we can simplify a lot of the code in this area and move common 
>> code to os_posix.
>> 
>> As of glibc 2.17 the necessary functions are in glibc rather than librt, but 
>> we (Oracle at least) aren't yet in position to set our minimum Linux version 
>> to support that. We still have supported platforms at glibc 2.12. So to 
>> address that we link librt at build time on Linux. This seems to work find 
>> for older and more modern Linuxes and also works for the Apline Linux with 
>> Musl variant.
>> 
>> The changes are in layered commits:
>> 
>> Step 1: Remove build time checks. SUPPORTS_CLOCK_MONOTONIC is assumed true 
>> and removed.
>> Step 2: make supports_monotonic_clock always true and so remove checking in 
>> OS code
>> Step 3: Replace gettimeofday by clock_gettime(CLOCK_REALTIME)
>> Step 4: Move shared time functions to os_posix.cpp
>> Step 5: Alway link librt on Linux so we don't rely on glibc > 2.17
>> 
>> Testing: tiers 1-3 for functional testing
>>              built and checked (-Xlog:os) on Linux with glibc 2.12 and 2.17, 
>>  macOS 10.13.6 and 10.15.7
>
> David Holmes has updated the pull request with a new target base due to a 
> merge or a rebase. The pull request now contains 12 commits:
> 
>  - 'Merge branch 'master' into 8246112-mono
>  - Update copyrights
>  - Remove the always true os::supports_monotonic_clock()
>  - Merge
>  - Merge branch 'master' into 8246112-mono
>  - Restrict librt linking to JVM - per Magnus's request
>  - Merge branch 'master' into 8246112-mono
>  - Alway link librt on Linux so we don't rely on glibc > 2.12
>  - Step 4: Move shared time functions to os_posix.cpp
>  - Step 3: Replace gettimeofday by clock_gettime(CLOCK_REALTIME)
>  - ... and 2 more: 
> https://git.openjdk.java.net/jdk/compare/764111ff...f4bf2b8a

src/hotspot/os/posix/os_posix.cpp line 1292:

> 1290:   return jlong(ts.tv_sec) * MILLIUNITS +
> 1291:     jlong(ts.tv_nsec) / NANOUNITS_PER_MILLIUNIT;
> 1292: }

David,
Great to see simplifications like this happening in OpenJdk code.
- Posix letting you delete platform specific code.
- Always nice to see 'if' branching eliminated to simplify test coverage and 
runtime.

-------------

PR: https://git.openjdk.java.net/jdk/pull/2090

Reply via email to