RFR: 8301341: LinkedTransferQueue does not respect timeout for poll() [v8]

Doug Lea dl at openjdk.org
Fri Jul 21 10:58:51 UTC 2023


On Fri, 21 Jul 2023 09:30:53 GMT, Viktor Klang <duke at openjdk.org> wrote:

>> Doug Lea has updated the pull request incrementally with one additional commit since the last revision:
>> 
>>   nitpicks
>
> src/java.base/share/classes/java/util/concurrent/LinkedTransferQueue.java line 397:
> 
>> 395:          * True if system is a uniprocessor, occasionally rechecked.
>> 396:          */
>> 397:         private static boolean isUniprocessor =
> 
> @DougLea  If this is intentionally non-volatile, I think it is worth documenting the rationale.

Added: (L348)
     * than unnecessarily requiring volatile accesses elsewhere. This
     * fence also separates accesses to field isUniprocessor.

> src/java.base/share/classes/java/util/concurrent/LinkedTransferQueue.java line 446:
> 
>> 444:                         Thread.onSpinWait();
>> 445:                     else
>> 446:                         LockSupport.parkNanos(ns);
> 
> @DougLea If `ns` is sufficiently large, would it not make sense to use managed blocking in case the current thread is a FJWT as below? 🤔

It's a good point, but we don't normally do this. Added (L336):
     * returns just barely too soon. As is the case in most j.u.c
     * blocking support, untimed waits use ManagedBlockers when
     * callers are ForkJoin threads, but timed waits use plain
     * parkNanos, under the rationale that known-to-be transient
     * blocking doesn't require compensation. (This decision should be
     * revisited here and elsewhere to deal with very long timeouts.)

> src/java.base/share/classes/java/util/concurrent/LinkedTransferQueue.java line 612:
> 
>> 610:         else if (m != null)
>> 611:             s.selfLinkItem();
>> 612:         return m;
> 
> @DougLea I'd probably add a newline before the return statement to visually distinguish that it isn't intended to be read as a part of the if-else branches.

Thanks. Done.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/14317#discussion_r1270541557
PR Review Comment: https://git.openjdk.org/jdk/pull/14317#discussion_r1270543495
PR Review Comment: https://git.openjdk.org/jdk/pull/14317#discussion_r1270543842


More information about the core-libs-dev mailing list