RFR: 8229516: Thread.isInterrupted() always returns false after thread termination

Doug Simon doug.simon at oracle.com
Thu Oct 31 07:47:54 UTC 2019



> On 31 Oct 2019, at 05:30, David Holmes <david.holmes at oracle.com> wrote:
> 
> Hi Doug,
> 
> On 30/10/2019 10:06 pm, Doug Simon wrote:
>>> On 30 Oct 2019, at 05:28, David Holmes <david.holmes at oracle.com <mailto:david.holmes at oracle.com>> wrote:
>>> 
>>> Hi Doug,
>>> 
>>> Your proposed patch wasn't quite right. I made some adjustments but I'm still having issues with the test, HotSpotMethodSubstitutionTest.testThreadSubstitutions, as I don't see how to make the test execution conditional on the VM config.
>> Like this:
> 
> Thanks for that! One alteration below ...
> 
>> diff --git a/compiler/src/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/HotSpotMethodSubstitutionTest.java b/compiler/src/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/HotSpotMethodSubstitutionTest.java
>> index 96e7d979d36..3c928b86961 100644
>> --- a/compiler/src/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/HotSpotMethodSubstitutionTest.java
>> +++ b/compiler/src/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/HotSpotMethodSubstitutionTest.java
>> @@ -28,12 +28,13 @@ import java.lang.invoke.ConstantCallSite;
>>  import java.lang.invoke.MethodHandles;
>>  import java.lang.invoke.MethodType;
>> -import org.graalvm.compiler.nodes.IfNode;
>> -import org.junit.Test;
>> -
>>  import org.graalvm.compiler.api.directives.GraalDirectives;
>>  import org.graalvm.compiler.api.replacements.MethodSubstitution;
>> +import org.graalvm.compiler.hotspot.GraalHotSpotVMConfig;
>> +import org.graalvm.compiler.hotspot.HotSpotBackend;
>> +import org.graalvm.compiler.nodes.IfNode;
>>  import org.graalvm.compiler.replacements.test.MethodSubstitutionTest;
>> +import org.junit.Test;
>>  /**
>>   * Tests HotSpot specific {@link MethodSubstitution}s.
>> @@ -133,13 +134,18 @@ public class HotSpotMethodSubstitutionTest extends MethodSubstitutionTest {
>>      @Test
>>      public void testThreadSubstitutions() {
>> +        GraalHotSpotVMConfig config = ((HotSpotBackend) getBackend()).getRuntime().getVMConfig();
>>          testGraph("currentThread");
>> -        assertInGraph(testGraph("threadIsInterrupted", "isInterrupted", true), IfNode.class);
>> -        assertInGraph(testGraph("threadInterrupted", "isInterrupted", true), IfNode.class);
>> +        if (config.osThreadOffset != Integer.MAX_VALUE) {
> 
> s/osThreadOffset/osThreadInterruptedOffset/

Good catch. Sorry about that.
> 
> This change removes the interrupted field from osThread but not osThread itself. Though as osThread is only used to then access the interrupted field, I could both the same. Here's updated webrev showing that:
> 
> http://cr.openjdk.java.net/~dholmes/8229516/webrev.v2/ <http://cr.openjdk.java.net/~dholmes/8229516/webrev.v2/>

Looks good.

-Doug


More information about the core-libs-dev mailing list