2-nd round RFR (XS) 8068162: jvmtiRedefineClasses.cpp: guarantee(false) failed: OLD and/or OBSOLETE method(s) found

Coleen Phillimore coleen.phillimore at oracle.com
Fri Jan 2 23:04:30 UTC 2015


Hi Serguei,

I don't see why you don't add a || the_class_oop == unsafe to the if 
statement I pointed out in the bug.   Then you don't have to walk the 
CLDG classes again.

Have a nice vacation!

Thanks,
Coleen

On 1/2/15, 5:23 PM, serguei.spitsyn at oracle.com wrote:
> Coleen,
>
> Please, find new open webrev here:
> http://cr.openjdk.java.net/~sspitsyn/webrevs/2015/hotspot/8068162-JVMTI-old.2/
>
> I've added a separate helper class in the VM_RedefineClasses and new 
> method in the klassItable klass.
> TBD: still need to run the SVC tests listed in the first email.
>
> I'm on vacation from today till Jan 9 but will try to reply on emails 
> in non-active mode.
>
> Thanks,
> Serguei
>
>
> On 12/31/14 10:50 AM, serguei.spitsyn at oracle.com wrote:
>> Colleen,
>>
>> Thank you for a quick review.
>> You are right, this is a good catch!
>> I need to rework my fix as it is incorrect in general.
>>
>>
>> On 12/31/14 10:40 AM, Coleen Phillimore wrote:
>>>
>>> The adjustment should be in klassItable::adjust_method_entries() not 
>>> the checking function.  I don't think 
>>> check_no_old_or_obsolete_entries is called in product mode.
>>>
>>> I still don't see how the first klassItable::adjust_method_entries() 
>>> missed this function.
>>
>> The Unsafe::throw_illegal_access is added to other itables, not to 
>> the one that belongs to the class Unsafe.
>>
>> Thanks,
>> Serguei
>>
>>
>>>
>>> Coleen
>>>
>>> On 12/31/14, 12:42 PM, serguei.spitsyn at oracle.com wrote:
>>>> Please, review the fix for:
>>>> https://bugs.openjdk.java.net/browse/JDK-8068162
>>>>
>>>>
>>>> Open webrev:
>>>> http://cr.openjdk.java.net/~sspitsyn/webrevs/2014/hotspot/8068162-JVMTI-old.1/ 
>>>>
>>>>
>>>>
>>>> Summary:
>>>>
>>>>    The sun.misc.Unsafe:throwIllegalAccessError() method is used in 
>>>> place of a default
>>>>    interface method in the itable if a default method was not 
>>>> defined in the interface.
>>>>
>>>>    This approach creates a problem when the class sun.misc.Unsafe 
>>>> is retransformed.
>>>>    The Method* pointer to the old (redefined) method in the itable 
>>>> triggers an assert
>>>>    (see the hs_err log in the bug report).
>>>>
>>>>    The fix is to replace the old method in the itable with the 
>>>> latest method version.
>>>>
>>>>
>>>> Testing:
>>>>   In progress: nsk.jdi.testlist, JTREG java/lang/instrument tests
>>>>
>>>>
>>>> Thanks,
>>>> Serguei
>>>>
>>>
>>
>



More information about the hotspot-dev mailing list