RFR(S): 8063112: Compiler diagnostic commands should have locking instead of safepoint
Nils Eliasson
nils.eliasson at oracle.com
Mon Nov 10 14:36:30 UTC 2014
Hi Albert,
On 2014-11-10 12:57, Albert Noll wrote:
> Hi Nils,
>
[...]
>>
> Here are two things that I don't understand:
> 1) assert_locked_or_safepoint(CodeCache_lock) checks if we are at a
> safepoint and/or we own the 'CodeCache_lock'. If we are at a
> safepoint, how can another thread possibly modify data structures in
> the code cache?
Looking at the code one more time the contract seem to be lock and
no_safepoint for mutators. But that is not what's asserted. We lock with
_no_safepoint_check - but that just means we don't verify anything. We
want to verify the no_safepoint.
Many of the asserts are also not really helpful. Example:
CodeCache::allocate - assert_locked_or_safepoint(CodeCache_lock) - The
lock guarantees correctness for multiple threads, the safepoint don't.
But we have locking at all the code paths that call on
CodeCache::allocate, and we never do it at a safepoint. So it works ok.
Writers should do: assert_locked_and_verify_no_safepoint()
Readers: assert locked_or_safepoint().
>
> 2) Why is it safe to use assert_locked_or_safepoint(CodeCache_lock) in
> so many places except for CodeCache::print_codelist(outputStream* st)?
On second thought is should be enough with
assert_locked_or_safepoint(CodeCache_lock) on all readers if we assert
locked_and_verify_not_at_safepoint on all writers. So the old
implementation was correct.
>
> 3) To make sure that no other thread modifies the code cache, wouldn't
> you you have to make sure that every modification to the code cache is
> guarded by assert(CodeCache_lock->owned_by_self(), "Checking") instead
> of assert_locked_or_safepoint(CodeCache_lock)? I.e., a lock is only
> useful if every modification to the code cache is guarded by that lock.
We should assert on lock and verify not at safepoint at the places
modifying the code cache if we want to keep the contract that it is ok
to read at safepoints.
Thanks,
Nils
> Best,
> Albert
>
>> Regards,
>> Nils
>>
>>>
>>> Thanks,
>>> Albert
>>>> Tested with jtreg tests in Hotspot and JDK that exercise this code.
>>>>
>>>> Bug: https://bugs.openjdk.java.net/browse/JDK-8063112
>>>> Webrev: http://cr.openjdk.java.net/~neliasso/8063112/webrev.01/
>>>>
>>>> Thanks,
>>>> Nils
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20141110/71af59f6/attachment.html>
More information about the hotspot-compiler-dev
mailing list