(10) (M) RFR: 8174231: Factor out and share PlatformEvent and Parker code for POSIX systems (original) (raw)
David Holmes david.holmes at oracle.com
Fri May 19 10:53:50 UTC 2017
- Previous message: (10) (M) RFR: 8174231: Factor out and share PlatformEvent and Parker code for POSIX systems
- Next message: (10) (M) RFR: 8174231: Factor out and share PlatformEvent and Parker code for POSIX systems
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On 19/05/2017 7:25 PM, Robbin Ehn wrote:
On 05/19/2017 11:07 AM, David Holmes wrote:
They have to be as there are three cases: 1. Relative wait using CLOCKMONOTONIC 2. Relative wait using gettimeofday() 3. Absolute wait using gettimeofday()
Please consider something like:
#ifdef SUPPORTSCLOCKMONOTONIC if (useclockmonotoniccondattr && !isAbsolute) { // Why aren't we using this when not isAbsolute is set? // I suggest removing that check from this if and use monotonic for that also. Absolute waits have to be based on wall-clock time and follow any adjustments made to wall clock time. In contrast relative waits should never be affected by wall-clock time adjustments hence the use of CLOCKMONOTONIC when available. In Java the relative timed-waits are: - Thread.sleep(ms) - Object.wait(ms)/wait(ms,ns) - LockSupport.parkNanos(ns) (and all the j.u.c blocking methods built on top of it) While the only absolute timed-wait we have is the LockSupport.parkUntil method(s). Hope that clarifies things. Yes thanks! But you can still re-factoring to something similar to what I suggested and two of the calculation should be the same just ns vs us, correct?
There are three different forms of the calculation. The two relative time versions use a different time function and so a different time structure (timeval vs timespec) and a different calculation.
Leaving the if statement with the "!isAbsolute" check, in my head calctime is something like:
void calctime(...) { if (isAbsolute) { calcabstime(...); } else { #ifdef SUPPORTS_CLOCK_MONOTONIC calcreltimefromclockmonotonic(...); #else calc_rel_time_from_gettimeofday(...); #endif } }
David
I do not see a problem with this, only better readability?
/Robbin
Thanks, David ----- struct timespec now; int status = clockgettime(CLOCKMONOTONIC, &now); assertstatus(status == 0, status, "clockgettime"); calctime(abstime, timeout, isAbsolute, now.tvsec, now.tvnsec, NANOUNITS); } else { #else { #endif struct timeval now; int status = gettimeofday(&now, NULL); assert(status == 0, "gettimeofday"); calctime(abstime, timeout, isAbsolute, now.tvsec, now.tvusec, MICROUNITS); } #endif
Thanks for fixing this! /Robbin
- Previous message: (10) (M) RFR: 8174231: Factor out and share PlatformEvent and Parker code for POSIX systems
- Next message: (10) (M) RFR: 8174231: Factor out and share PlatformEvent and Parker code for POSIX systems
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]