RFR(XS): 8143897 :Weblogic12medrec assert(handler_address == SharedRuntime::compute_compiled_exc_handler(nm, pc, exception, force_unwind, true)) failed: Must be the same

Dean Long dean.long at oracle.com
Mon Feb 1 19:54:20 UTC 2016


On 1/29/2016 9:19 PM, Jamsheed C m wrote:
>
>
> On 1/30/2016 9:38 AM, Jamsheed C m wrote:
>>
>> Hi Dean,
>>
>> On 1/30/2016 12:49 AM, Dean Long wrote:
>>> On 1/28/2016 10:36 PM, Jamsheed C m wrote:
>>>> Hi Dean,
>>>>
>>>> On 1/29/2016 9:40 AM, Dean Long wrote:
>>>>> As you noticed, for this kind of bug the memory is going to 
>>>>> consistent by the time the core file is written.
>>>>> So to help debug this assert it if happens again, could you change 
>>>>> it to something like:
>>>>>
>>>>> #ifdef ASSERT
>>>>>     address computed_address = 
>>>>> SharedRuntime::compute_compiled_exc_handler(nm, pc, exception, 
>>>>> force_unwind, true);
>>>>>     vmassert(handler_address == computed_address, PTR_FORMAT " != 
>>>>> " PTR_FORMAT, p2i(handler_address), p2i(computed_address));
>>>>> #endif
>>>> I got handler_address value in this case. This value was 
>>>> inconsistent with value in ExceptionCache.
>>>> It was having initial value and that was helpful in figuring out 
>>>> what would have went wrong.
>>>>
>>>
>>> In the bug report, you said all data in the core file was 
>>> consistent, so I'm just wondering where you saw
>>> it inconsistent.   Just to confirm what was going wrong, you suspect 
>>> that _count was being updated before the handler?
>> i meant ExceptionCache(heap) and ExecptionHandlerTable(heap) contents 
>> were consistent at the time core file was written.
>> handler_address(local variable) had already captured failing value. 
>> handler_address(local variable) was inconsistent with 
>> ExceptionCache(heap) hanlder_address in core file.
>>
>> there were two failing case.
>> 1) Only one entry in exception cache and failing
>>
>>         -here i suspect handler_address in exception cache write code 
>> got reordered well below count and and even ExceptioCache pointer 
>> update in nm.
>> 2)Two entries in exception cache for an exception and second entry 
>> causing failure.
>>
>>         - here i suspect handler_address in exception cache write 
>> code got reordered below count.
>>
>> These reordering happens in very small window, as this code is 
>> already lock protected ( and has a mem barrier below).
> i have removed the ambiguity in the bug report.
>

OK thanks.  The change looks good to me.

dl

> Best Regards,
> Jamsheed
>>
>> Best,
>> Jamsheed
>>
>>>
>>> dl
>>>
>>>> I will make this change.
>>>>
>>>> Best Regards,
>>>> Jamsheed
>>>>>
>>>>> dl
>>>>>
>>>>> On 1/28/2016 8:16 AM, Jamsheed C m wrote:
>>>>>> Hi,
>>>>>>
>>>>>> Please review the fix made for issue
>>>>>>
>>>>>> bug url: https://bugs.openjdk.java.net/browse/JDK-8143897
>>>>>> web rev: http://cr.openjdk.java.net/~thartmann/8143897/webrev.00/
>>>>>>
>>>>>> Unit tests: As its hard, none
>>>>>>
>>>>>> Other tests: jprt.
>>>>>>
>>>>>> Description of the issue:
>>>>>> A valid pc match in exception cache returning an invalid handler 
>>>>>> makes assert to fail.
>>>>>> This happens as  ExceptionCache reads are lock free access.
>>>>>>
>>>>>> As a fix for this i have put a storestore mem barrier before the 
>>>>>> count is updated.
>>>>>>
>>>>>> Best Regards,
>>>>>> Jamsheed
>>>>>
>>>>
>>>
>>
>



More information about the hotspot-compiler-dev mailing list