RFR #2 (S) CR 8015270: @Contended: fix multiple issues in the layout code

Daniel D. Daugherty daniel.daugherty at oracle.com
Mon May 27 11:51:01 PDT 2013


On 5/27/13 11:53 AM, Aleksey Shipilev wrote:
> On 05/27/2013 09:24 PM, Daniel D. Daugherty wrote:
>> On 5/25/13 1:35 AM, Aleksey Shipilev wrote:
>>> Here's the merged changeset:
>>>     http://cr.openjdk.java.net/~shade/8015270/webrev.01/
>> Thumbs up!
> Thanks for the review!

No problem. I forgot to say that the unified review webrev didn't
appear to be tangled at all (to me).


>
>> hotspot/test/runtime/contended/HasNonStatic.java
>> hotspot/test/runtime/contended/OopMaps.java
>>      It would be good to update JDK-8015270 with information about
>>      what happens when these tests are run on a VM/JDK that does
>>      not have the fix. That will help with the bug fix verification
>>      process.
> I can do that. Is there an example of this practice somewhere in our
> code? Random sampling in hotspot/test yield no result. I'd like to see
> some uniform way we record this info in the regression tests -- will the
> Javadoc on test class suffice?

Sorry, I wasn't clear. I didn't mean to update the tests with the sample
failing output. I always like to put that stuff in the bug report.

Something like what I put in 7191322:

<begin sample>
Here is what a failing run with JDK7-B147 looks like:

#section:shell
----------messages:(3/183)----------
command: shell VerifyLocalVariableTableOnRetransformTest.sh []
reason: User specified action: run shell 
VerifyLocalVariableTableOnRetransformTest.sh
elapsed time (seconds): 3.869
----------System.out:(54/3613)*----------
InstrumentationHandoff JPLIS agent initialized
java version "1.7.0"
Java(TM) SE Runtime Environment (build 1.7.0-b147)
Java HotSpot(TM) Client VM (build 21.0-b17, mixed mode)

Reading test class from 
C:\\work\\shared\\bug_hunt\\jdk8\\exp_7064927_test\\sdk-jli.windows-i586\\JTwork\\classes\\java\\lang\\instrument\\DummyClassWithLVT.class
Read 1448 bytes.
Debugging message: Added transformer 
VerifyLocalVariableTableOnRetransformTest$MyObserver with 
canRetransform=true
VerifyLocalVariableTableOnRetransformTest$MyObserver.transform() sees 
'DummyClassWithLVT' of 1448 bytes.
Info: DummyClassWithLVT lengths match.
Info: verified 'DummyClassWithLVT.class' matches 'classfileBuffer'.
VerifyLocalVariableTableOnRetransformTest$MyObserver.transform() sees 
'DummyClassWithLVT' of 1332 bytes.
Warning: DummyClassWithLVT lengths do not match.
Debugging message: tearDown beginning
Exception in thread "main" 
VerifyLocalVariableTableOnRetransformTest$MyObserver.transform() sees 
'java/lang/Throwable$WrappedPrintStream' of 699 bytes.
VerifyLocalVariableTableOnRetransformTest$MyObserver.transform() sees 
'java/lang/Throwable$PrintStreamOrWriter' of 492 bytes.
VerifyLocalVariableTableOnRetransformTest$MyObserver.transform() sees 
'java/util/IdentityHashMap' of 9031 bytes.
VerifyLocalVariableTableOnRetransformTest$MyObserver.transform() sees 
'java/util/IdentityHashMap$KeySet' of 1793 bytes.
ATestCaseScaffold$TestCaseScaffoldException: DummyClassWithLVT did not 
match .class file
         at ATestCaseScaffold.fail(ATestCaseScaffold.java:116)
         at ATestCaseScaffold.assertTrue(ATestCaseScaffold.java:129)
         at 
VerifyLocalVariableTableOnRetransformTest.verifyClassFileBuffer(VerifyLocalVariableTableOnRetransformTest.java:123)
         at 
VerifyLocalVariableTableOnRetransformTest.doRunTest(VerifyLocalVariableTableOnRetransformTest.java:72)
         at ATestCaseScaffold.runTest(ATestCaseScaffold.java:60)
         at 
VerifyLocalVariableTableOnRetransformTest.main(VerifyLocalVariableTableOnRetransformTest.java:66)
VerifyLocalVariableTableOnRetransformTest$MyObserver.transform() sees 
'java/lang/Shutdown' of 2956 bytes.
VerifyLocalVariableTableOnRetransformTest$MyObserver.transform() sees 
'java/lang/Shutdown$Lock' of 377 bytes.
ATestCaseScaffold$TestCaseScaffoldException: DummyClassWithLVT did not 
match .class file
FAIL: found 'did not match .class file' in the test output
INFO: 'javap -v' comparison between the .class files:
1,3c1,3
< Classfile 
/C:/work/shared/bug_hunt/jdk8/exp_7064927_test/sdk-jli.windows-i586/JTwork/classes/java/lang/instrument/DummyClassWithLVT.class
<   Last modified Aug 13, 2012; size 1448 bytes
<   MD5 checksum add938cbf65c704016583270092d8258
---
 > Classfile 
/C:/work/shared/bug_hunt/jdk8/exp_7064927_test/sdk-jli.windows-i586/JTwork/java/lang/instrument/VerifyLocalVariableTableOnRetransformTest/DummyClassWithLVT.class
 >   Last modified Aug 13, 2012; size 1332 bytes
 >   MD5 checksum 65f4b7ecfaf38db537034ecd5723e85a
116,118d115
<       LocalVariableTable:
<         Start  Length  Slot  Name   Signature
<                0       5     0  this   LDummyClassWithLVT;
239,249d235
<       LocalVariableTable:
<         Start  Length  Slot  Name   Signature
<                0     236     0  args   [Ljava/lang/String;
<                2     234     1     b   Z
<                5     231     2    by   B
<                8     228     3     c   C
<               13     223     4     d   D
<               17     219     6     f   F
<               21     215     7     i   I
<               26     210     8     l   J
<               30     206    10     s   S
----------System.err:(0/0)----------
result: Failed. Execution failed: exit code 1


test result: Failed. Execution failed: exit code 1

<end sample>

The sample gives the VM/SQE engineer something to look for when they are
trying reproduce the original failure before they try to verify the fix.



>
>
>> JBS/administrivia issues:
>>
>> I bumped JDK-8015270 to P2 since JDK-8014886 is a P2.
> Oh, I think JDK-8014886 is P3, because the likelihood is low, and there
> is the workaround with either emulating @C on fields with class-level
> @C, or some other trick. I have not changed the priority for the closed
> issue, because did not thought it is relevant anymore. Please consider
> setting the priority back; I can do that along the change below:

I think you should be the one to lower the priority of _both_ bugs
with the explanation that you have given above.

The reason that this is important: There are some tools that look
specifically for bugs of a higher priority closed as dups of a
new bug with a lower priority. In the past some folks have used
that a covert means of lowering the priority of an issue in order
to get the issue off some list or another.

>
>> I believe the correct 'duplicate state' is:
>>
>>      JDK-8015270 duplicates JDK-8014886
>>      JDK-8015270 duplicates JDK-8014964
>>
>> since JDK-8015270 is the bug that is going to be used to get
>> the work done.
> Hmmm... I think you are right. Do you want me to relink these appropriately?

Yes, please.

Dan



More information about the hotspot-runtime-dev mailing list