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

Vladimir Kozlov vladimir.kozlov at oracle.com
Fri Jan 29 00:52:26 UTC 2016


On 1/28/16 12:29 PM, Jamsheed C m wrote:
>
>
> 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?

+1. As I understand, Chris is suggesting to do it in addition to storestore barrier.

Do we have other similar code?

Thanks,
Vladimir

>
> 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