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.spit...@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.spit...@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




Reply via email to