RFR (XS): 8023004: JSR 292: java.lang.RuntimeException: Original target method was called.

serguei.spitsyn at oracle.com serguei.spitsyn at oracle.com
Mon Oct 14 12:48:38 PDT 2013


The fix is good (if my opinion is counted here).

Thanks,
Serguei


On 10/14/13 12:15 PM, Vladimir Ivanov wrote:
> http://cr.openjdk.java.net/~vlivanov/8023004/webrev.00/
> 7 lines changed: 5 ins; 1 del; 1 mod
>
> Assertion code in JDK fetches info from VM using MHN.getMemberVMInfo:
>  assert(m.vminfoIsConsistent());
>
> After that check, class redefinition is broken - it's still possible 
> to invoke old version of a method.
>
> Analysis from Serguei:
> "The problem is here:
> oop MethodHandles::init_method_MemberName(Handle mname, CallInfo& info) {
>   . . . . . . . .
>   m->method_holder()->add_member_name(m->method_idnum(), mname);
>
>   return mname();
> }
>
> The call to add_member_name() resets the member name at the index 
> m->method_idnum(). After that one of the two member names with the 
> same method_idnum() is out of the MNT and is not updated when the 
> method is redefined."
>
> The fix is to check whether there's already a member name associated 
> with the before creating a new one.
>
> Testing: failing test.
>
> Contributed-by: sspitsyn, vlivanov
>
> Best regards,
> Vladimir Ivanov
>
> JBS: https://bugs.openjdk.java.net/browse/JDK-8023004



More information about the hotspot-compiler-dev mailing list