(10) (M) RFR: 8174231: Factor out and share PlatformEvent and Parker code for POSIX systems
David Holmes
david.holmes at oracle.com
Fri May 19 11:36:11 UTC 2017
Correction ...
On 19/05/2017 8:53 PM, David Holmes wrote:
> 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 CLOCK_MONOTONIC
>>> 2. Relative wait using gettimeofday()
>>> 3. Absolute wait using gettimeofday()
>>>
>>>> Please consider something like:
>>>>
>>>> #ifdef SUPPORTS_CLOCK_MONOTONIC
>>>> if (_use_clock_monotonic_condattr && !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 CLOCK_MONOTONIC 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
>> calc_time is something like:
>>
>> void calc_time(...) {
>> if (isAbsolute) {
>> calc_abs_time(...);
>> } else {
> #ifdef SUPPORTS_CLOCK_MONOTONIC
>> calc_rel_time_from_clock_monotonic(...);
> #else
> > calc_rel_time_from_gettimeofday(...);
> #endif
>> }
>> }
It's more complicated than that because we may have build time
SUPPORTS_CLOCK_MONOTONIC but we still need the runtime check as well.
to_abstime is the old linux unpackTime with the addition of the build
time conditionals.
David
> David
> -----
>
>> I do not see a problem with this, only better readability?
>>
>> /Robbin
>>
>>>
>>> Thanks,
>>> David
>>> -----
>>>
>>>> struct timespec now;
>>>> int status = _clock_gettime(CLOCK_MONOTONIC, &now);
>>>> assert_status(status == 0, status, "clock_gettime");
>>>> calc_time(abstime, timeout, isAbsolute, now.tv_sec,
>>>> now.tv_nsec, NANOUNITS);
>>>> } else {
>>>> #else
>>>> {
>>>> #endif
>>>> struct timeval now;
>>>> int status = gettimeofday(&now, NULL);
>>>> assert(status == 0, "gettimeofday");
>>>> calc_time(abstime, timeout, isAbsolute, now.tv_sec,
>>>> now.tv_usec, MICROUNITS);
>>>> }
>>>> #endif
>>>>
>>>> Thanks for fixing this!
>>>>
>>>> /Robbin
More information about the build-dev
mailing list