RFR (XS) 8066679: jvmtiRedefineClasses.cpp assert cache ptrs must match

serguei.spitsyn at oracle.com serguei.spitsyn at oracle.com
Tue Apr 7 20:14:18 UTC 2015


Great

Thanks, Dan!
Serguei

On 4/7/15 9:44 AM, Daniel D. Daugherty wrote:
> On 3/25/15 7:16 PM, serguei.spitsyn at oracle.com wrote:
>> Please, review the fix for:
>>   https://bugs.openjdk.java.net/browse/JDK-8066679
>>
>>
>> Open hotspot webrev:
>> http://cr.openjdk.java.net/~sspitsyn/webrevs/2015/hotspot/8066679-JVMTI-cache.1/ 
>>
>
> src/share/vm/prims/jvmtiRedefineClasses.cpp
>     I concur that the old assertions are bad. They assume that
>     the cached class file bytes on the scratch_class must match
>     the cached class file bytes on the target class. That's a
>     valid assumption in a RedefineClasses() only world, but that's
>     not true when RetransformClasses() is used.
>
> This will be hard to test. I think the race can only happen
> on the first retransform of a class. If you have two parallel
> retransform threads, both see that there are no cached bytes
> so both cache the initial bytes and then both have to update
> the cached bytes pointer at about the same time... Very hard
> to do...
>
> Thumbs up.
>
> Dan
>
>
>>
>>
>> Summary:
>>
>>   There can be multiple concurrent RetransformClasses calls on 
>> different threads.
>>   So that, the assert "cache ptrs must match" is incorrect as it was 
>> based on wrong assumptions.
>>   The fix removes two related asserts and also frees the 
>> scratch_class cached_class_file_bytes
>>   if it is necessary to avoid leaking the memory.
>>
>>
>> Testing:
>>   In progress: nsk redefine classes tests, JTREG java/lang/instrument
>>
>>
>> Thanks,
>> Serguei
>>
>



More information about the hotspot-dev mailing list