RFR (S) 8216136: Don't take Compile_lock for SystemDictionary::_modification_counter
coleen.phillimore at oracle.com
coleen.phillimore at oracle.com
Thu Jan 24 02:38:05 UTC 2019
On 1/23/19 9:31 PM, David Holmes wrote:
> Hi Coleen,
>
> On 24/01/2019 12:20 am, coleen.phillimore at oracle.com wrote:
>>
>> After some internal discussion, Dean convinced me that removing the
>> Compile_lock here might be too dangerous. So for these asserts and
>> the error condition, the compiler thread goes to VM from native to
>> check the SystemDictionary::modification_counter under the
>> Compile_lock, with safepoint checking always.
>
> That sounds quite reasonable. Reviewed.
>
> Though perhaps the bug synopsis should be updated to reflect the
> change in direction before pushing.
Done, thanks!
Coleen
>
> Thanks,
> David
> -----
>
>> Tested with tier1,2,6 and 8.
>>
>> open webrev at http://cr.openjdk.java.net/~coleenp/8216136.02/webrev
>> bug link https://bugs.openjdk.java.net/browse/JDK-8216136
>>
>> Thanks,
>> Coleen
>>
>> On 1/17/19 7:15 AM, coleen.phillimore at oracle.com wrote:
>>>
>>>
>>> On 1/16/19 10:53 PM, dean.long at oracle.com wrote:
>>>> Hi Coleen. You still can't safely call notice_modification()
>>>> outside of Compile_lock, (at least not without other changes), so
>>>> this:
>>>>
>>>> - static inline void notice_modification() {
>>>> assert_locked_or_safepoint(Compile_lock);
>>>> ++_number_of_modifications; }
>>>> + static inline void notice_modification() {
>>>> Atomic::inc(&_number_of_modifications); }
>>>>
>>>> should be:
>>>>
>>>> static inline void notice_modification() {
>>>> assert_locked_or_safepoint(Compile_lock);
>>>> Atomic::inc(&_number_of_modifications); }
>>>>
>>>>
>>>> Are you trying to eventually remove Compile_lock completely? If
>>>> so, then notice_modification() would have to be called *before* the
>>>> class hierarchy is changed, not after, and probably other changes
>>>> would be needed as well.
>>> Dean, Thank you for looking at this and your comments.
>>>
>>> No, I'm not trying to remove Compile_lock entirely and I can assert
>>> that notice_modification has the Compile_lock as above. The class
>>> hierarchy code has been changed to be lock free rather than
>>> requiring the Compile_lock, although I think the Compile_lock still
>>> protects some of this code.
>>>
>>> There are also some Compile_lock free ways of getting to
>>> dependencies, because putting notice_modification after
>>> flush_dependencies caused bugs that I'll ask to you offline about.
>>>
>>> Thanks for your help. I was just trying to peel off one place where
>>> Compile_lock seemed wrong.
>>>
>>> Thanks,
>>> Coleen
>>>>
>>>> dl
>>>>
>>>>
>>>> On 1/16/19 8:43 AM, coleen.phillimore at oracle.com wrote:
>>>>> Summary: make SystemDictionary::modification_counter atomic so not
>>>>> to require Compile_lock.
>>>>>
>>>>> I moved updating the modification counter when the class is
>>>>> defined and added to the hierarchy. I didn't remove the
>>>>> Compile_lock completely because there may be other code currently
>>>>> under the lock that needs it (flush_dependencies). Can someone
>>>>> from the compiler area also review this?
>>>>>
>>>>> Made Compile_lock an always safepointing lock.
>>>>>
>>>>> Tested with mach5 tier1-6.
>>>>>
>>>>> open webrev at http://cr.openjdk.java.net/~coleenp/8216136.01/webrev
>>>>> bug link https://bugs.openjdk.java.net/browse/JDK-8216136
>>>>>
>>>>> Thanks,
>>>>> Coleen
>>>>
>>>
>>
More information about the hotspot-dev
mailing list