RFR: 8067247: Crash: assert(method_holder->data() == 0 ...) failed: a) MT-unsafe modification of inline cache

Dean Long dean.long at oracle.com
Sat Mar 26 08:20:19 UTC 2016


Instead of changing cleanup_inline_caches() to take a new flag, can you 
use the existing
clear_inline_caches()?

dl

On 3/25/2016 9:54 AM, Jamsheed C m wrote:
> Thank you Chris.
> I have updated the code.
>
> + if (method == NULL) {
> + return;
> + }
> + nmethod* nm = method->code();
> + if (nm == NULL || nm->is_unloaded()) {
> + return;
> + }
> + nm->cleanup_inline_caches(true);
> Best Regards,
> Jamsheed
>
> On 3/25/2016 6:58 AM, Christian Thalinger wrote:
>>
>>> On Mar 24, 2016, at 11:05 AM, Jamsheed C m <jamsheed.c.m at oracle.com> 
>>> wrote:
>>>
>>> Hi All,
>>>
>>> Request for review,
>>>
>>> bug url: https://bugs.openjdk.java.net/browse/JDK-8067247
>>>
>>> webrevs:
>>> fix:
>>>   jdk part: http://cr.openjdk.java.net/~jcm/8067247/webrev.jdk.00/ 
>>> <http://cr.openjdk.java.net/%7Ejcm/8067247/webrev.jdk.00/>
>>>
>>> newly added test case
>>> hotspot part:
>>> http://cr.openjdk.java.net/~jcm/8067247/webrev.hs.00/ 
>>> <http://cr.openjdk.java.net/%7Ejcm/8067247/webrev.hs.00/>
>>> under hs-comp/test
>>> http://cr.openjdk.java.net/~jcm/8067247/webrev.hs_comp.00/ 
>>> <http://cr.openjdk.java.net/%7Ejcm/8067247/webrev.hs_comp.00/>
>>>
>>> Unit Test: test/compiler/jsr292/misc/gc/MHInvokeTest.java
>>> Testing: JPRT with new test case, with fix, without fix
>>>
>>> Problem Summary:  MH.invoke linksite take assistance of java code to 
>>> get an adapter method. Here a new method holder class and a adapter 
>>> method are created for a MT and lform instance is cached.
>>> Normally this cached lform get returned for a linksite request of 
>>> same MT.  When these cached lform get collected(due to memory 
>>> pressure),  a new class and method gets created for same MT(even 
>>> though old method holder class and  adapter method are live).
>>> Fix Summary: Kept a strong reference to lform instance in adapter 
>>> method holder class of  MT.
>>
>> Wow!  You found the cause for his long-standing issue?  Nice.
>> + if (method == NULL) { return; }
>> + nmethod* nm = method->code();
>> + if (nm == NULL) { return; }
>> + if (nm->is_unloaded()) { return; }
>> Please put the return and } on separate lines.
>>
>>>
>>> Best Regards,
>>> Jamsheed
>>>
>>>
>>>
>>>
>>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20160326/0087f06a/attachment.html>


More information about the hotspot-compiler-dev mailing list