JDK 9 RFR of JDK-8068693/8153209: (ch) test java/nio/channels/AsyncCloseAndInterrupt.java failing

Hamlin Li huaming.li at oracle.com
Wed Apr 6 02:20:30 UTC 2016



On 2016/4/6 10:01, Martin Buchholz wrote:
> On Tue, Apr 5, 2016 at 6:26 PM, Hamlin Li <huaming.li at oracle.com> wrote:
>> Hi Martin,
>> Thanks for reviewing, please check my comments inline.
>>
>> -Hamlin
>>
>> On 2016/4/6 1:23, Martin Buchholz wrote:
>>> The use of sleeps in these tests is disturbing.  Occasionally they're
>>> necessary, but usually they can be removed. For example
>>>
>>>    574         do {
>>>    575             sleep(50);
>>>    576         } while (!t.ready);
>> Yes, agree with you. But as this piece of code is legacy code, and does not
>> cause any testing issue, so I choose to keep it.
> Well, yes, but you are introducing a new sleep(100).
>
> My own experience is that 100ms is never long enough to wait for any
> other thread to do something.  But this is just a drive by comment - I
> don't understand this code enough to understand the purpose of the
> sleep.
Hi Martin,

( There is a little bit long history, it involves 3 bugs 
https://bugs.openjdk.java.net/browse/JDK-8151582, 
https://bugs.openjdk.java.net/browse/JDK-8068693, 
https://bugs.openjdk.java.net/browse/JDK-8153209. )

No, this(sleep(100)) is not introduced by me, it's deleted in another 
fix where I tried to fix another issue 
(https://bugs.openjdk.java.net/browse/JDK-8151582, 
http://hg.openjdk.java.net/jdk9/jdk9/jdk/rev/88577677aec9), but seems 
the fix introduced a new 
issue(https://bugs.openjdk.java.net/browse/JDK-8153209) which never 
occurred before. so sleep(100) is in fact kind of an rollback rather 
than introducing new code.
And, even if we use CountDownLatch to wait, I'm afraid it will not work 
exactly as expected, below is a briefing:
in thread_main,
   1. launch thread_2
   2. wait (sleep or CountDownLatch) until thread_2 get into a blocking 
io operation such as reading a socket
   3. call close/interrupt ...
in thread 2,
   1. before get to the reading operation, notify thread_main
   2. get into the blocking io operation
But there is still a time window between step 3 in main_thread, and step 
2 in thread_2, so I don't think CountDownLatch will solve the issue 
perfectly. As this new 
issue(https://bugs.openjdk.java.net/browse/JDK-8153209) never occur 
before, so I think the best way to fix it is to keep the original code 
for the new failing test cases reported in 
https://bugs.openjdk.java.net/browse/JDK-8153209, and introducing the 
new code(not calling sleep(100)) for the failing test cases reported in 
https://bugs.openjdk.java.net/browse/JDK-8151582.

Thank you
-Hamlin



More information about the nio-dev mailing list