Request for review: JDK-8012052: java/lang/invoke/6987555/Test6987555.java crashes with assert(mcs != NULL) failed: MethodCounters cannot be NULL
David Holmes
david.holmes at oracle.com
Thu Apr 11 19:43:20 PDT 2013
Seems quite reasonable.
Aside: when looking at other uses of method_counters() for missing NULL
checks I noticed:
MethodCounters* Method::build_method_counters(Method* m, TRAPS) {
methodHandle mh(m);
ClassLoaderData* loader_data = mh->method_holder()->class_loader_data();
MethodCounters* counters = MethodCounters::allocate(loader_data,
CHECK_NULL);
if (mh->method_counters() == NULL) {
mh->set_method_counters(counters);
} else {
MetadataFactory::free_metadata(loader_data, counters);
}
return mh->method_counters();
}
Can't we simplify that to:
MethodCounters* Method::build_method_counters(Method* m, TRAPS) {
methodHandle mh(m);
if (mh->method_counters() == NULL) {
ClassLoaderData* loader_data =
mh->method_holder()->class_loader_data();
MethodCounters* counters = MethodCounters::allocate(loader_data,
CHECK_NULL);
mh->set_method_counters(counters);
}
return mh->method_counters();
}
Thanks,
David
On 12/04/2013 10:39 AM, Jiangli Zhou wrote:
> Please review the following fix for JDK-8012052
> <https://jbs.oracle.com/bugs/browse/JDK-8012052>:
>
> http://cr.openjdk.java.net/~jiangli/8012052/webrev.00/
>
> The MethodCounters object is not guaranteed to be present for a method
> that is being compiled when NonTieredCompPolicy::delay_compilation() is
> called due to compiler shuts off. In
> java/lang/invoke/6987555/Test6987555 test case, the current method being
> compiled is java.lang.invoke.MethodHandle::linkToStatic(LL), which
> hasn’t been executed before and has no associated MethodCounters at the
> time. Since delay_compilation() decrements the _counter by dividing 2
> only if _counter >0, there is no need to call delay_compilation() when
> the method has no associated MethodCounters.
>
> Thanks,
> Jiangli
More information about the hotspot-runtime-dev
mailing list