[8u] RFR JDK-8161144: Fix for JDK-8147451 failed: Crash in Method::checked_resolve_jmethod_id(_jmethodID*)

Shafi Ahmad shafi.s.ahmad at oracle.com
Mon Aug 1 06:48:16 UTC 2016


Hi David,

Thanks for the review.

> -----Original Message-----
> From: David Holmes
> Sent: Monday, August 01, 2016 5:32 AM
> To: Shafi Ahmad; Coleen Phillimore; hotspot-runtime-dev at openjdk.java.net
> Subject: Re: [8u] RFR JDK-8161144: Fix for JDK-8147451 failed: Crash in
> Method::checked_resolve_jmethod_id(_jmethodID*)
> 
> Hi Shafi,
> 
> On 30/07/2016 1:10 AM, Shafi Ahmad wrote:
> > Hi All,
> >
> > Could I have 2nd Reviewer's review for this change, please?
> 
> I didn't see you respond to Coleen's query re JDK9. If this is not applicable to
> JDK9 please add a 9-na label to the bug report.

I replied to her mail, this is not reproducible in jdk9. I have updated the bug with 9-na label.

> 
> Looking at the code:
> 
> +   void clear_method(Method* m) {
> +     for (JNIMethodBlock* b = this; b != NULL; b = b->_next) {
> +       for (int i = 0; I< number_of_methods; i++) {
> +         if (b->_methods[i] == m) {
> +           b->_methods[i] = NULL;
> +         }
> +       }
> +     }
> +     // not found
> +   }
> 
> Based on the "not found" comment I assume you intended to do a return
> after NULLing out the method?

Yes, you are right.  I assume the array  b->_methods will not have duplicate entry.

> 
> Nit: need space after i in i<

I will send updated webrev.

Regards,
Shafi    

> 
> ---
> 
> 1882 void Method::clear_jmethod_id(ClassLoaderData* loader_data) {
> 1883   loader_data->jmethod_ids()->clear_method(this);
> 1884 }
> 
> Not sure why you felt the need to add a new member function for this
> instead of just doing line #1883 directly at line #113
> 
> ---
> 
>  >>> After this change I am seeing Method::is_method_id() is getting  >>>
> called with NULL and I have done below change to avoid crash  >>>  >>> -
> assert(m != NULL, "should be called with non-null method");  >>> +  if (m ==
> NULL) {
>  >>> +    return false;
>  >>> +  }
> 
> This is the only call I can see to is_method_id:
> 
> 1870 Method* Method::checked_resolve_jmethod_id(jmethodID mid) {
> 1871   if (mid == NULL) return NULL;
> 1872   if (!Method::is_method_id(mid)) {
> 1873     return NULL;
> 1874   }
> 
> So I don't see how it can be being passed NULL. If it is then you have a
> problem!
> 
> Thanks,
> David
> -----
> 
> 
> > Regards,
> > Shafi
> >
> >> -----Original Message-----
> >> From: Coleen Phillimore
> >> Sent: Monday, July 25, 2016 5:52 PM
> >> To: hotspot-runtime-dev at openjdk.java.net
> >> Subject: Re: [8u] RFR JDK-8161144: Fix for JDK-8147451 failed: Crash
> >> in
> >> Method::checked_resolve_jmethod_id(_jmethodID*)
> >>
> >>
> >> This looks good.  Was this a backport or is it still broken in 9?
> >> thanks,
> >> Coleen
> >>
> >> On 7/25/16 7:53 AM, Shafi Ahmad wrote:
> >>> Hi,
> >>>
> >>> Please review the small code change for bug: "JDK-8161144: Fix for
> >>> JDK-
> >> 8147451 failed: Crash in
> >> Method::checked_resolve_jmethod_id(_jmethodID*)" on jdk8u-dev
> >>>
> >>> Summary:
> >>> Method::deallocate_contents() should clear 'this' from list of
> >>> Methods in
> >> JNIMethodBlock, similarly to clear_all_methods() does it, when class
> >> is unloaded.
> >>> After this change I am seeing Method::is_method_id() is getting
> >>> called with
> >> NULL and I have done below change to avoid crash
> >>>
> >>> -  assert(m != NULL, "should be called with non-null method");
> >>> +  if (m == NULL) {
> >>> +    return false;
> >>> +  }
> >>>
> >>> Webrev: http://cr.openjdk.java.net/~shshahma/8161144/webrev/
> >>> Jdk8 bug: https://bugs.openjdk.java.net/browse/JDK-8161144
> >>>
> >>> Test:  Run jprt
> >>>
> >>> Regards,
> >>> Shafi
> >>


More information about the hotspot-runtime-dev mailing list