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

Jamsheed C m jamsheed.c.m at oracle.com
Thu Jan 28 20:29:51 UTC 2016



On 1/29/2016 12:15 AM, Christian Thalinger wrote:
>     if (count() < cache_size) {
>       set_pc_at(count(),addr);
>       set_handler_at(count(), handler);
>
> Shouldn’t we read count() only once into a local variable to rule any odd race bugs down the road?

write to cache is mutex lock protected. so this code is safe.

Issue is seen in weak memory order machines.  lockless read of exception 
cache values fails as writes in cache get reordered.

Best Regards,
Jamsheed
>
>> On Jan 28, 2016, at 5:16 PM, Jamsheed C m <jamsheed.c.m at oracle.com> 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