RFR: 8346123: [REDO] NMT should not use ThreadCritical

Robert Toyonaga duke at openjdk.org
Tue Dec 17 13:48:37 UTC 2024


On Tue, 17 Dec 2024 06:57:59 GMT, David Holmes <dholmes at openjdk.org> wrote:

>> CML could perhaps be used has-a (though that might be messy), but should not
>> be used is-a.  One of the basic rules for base classes is to have either a
>> public virtual destructor (don't do that here) or a non-public non-virtual
>> destructor, to prevent accidental slicing.  MutexLockerImpl has that - it was
>> designed to be a base class.  CML doesn't - it was not designed to be a base
>> class.  (There is a common (though not universal) opinion that classes should
>> either be base or concrete classes, not both.) I know we violate this rule all
>> over the place; that doesn't mean we should do so here.
>> 
>> But really, there's no benefit to using CML here. Deriving from
>> MutexLockerImpl is about the same number of characters, and seems clearer to
>> me because it's more direct.
>> 
>> 
>> class NmtVirtualMemoryLocker : public MutexLockerImpl {
>> public:
>>   NmtVirtualMemoryLocker()
>>     : MutexLockerImpl(_done_bootstrap ? NmtVirtualMemory_lock : nullptr,
>>                       Mutex::_no_safepoint_check_flag)
>>   {}
>> }
>> 
>> 
>> Related, I just noticed that MutexLockerImpl is copyable, but shouldn't be.
>> (I remember a discussion a long time ago about whether StackObj should be
>> noncopyable, which foundered on a combination of some significant number of
>> existing uses that violated that restriction, along with disagreement about
>> the meaning of deriving from StackObj.  So we're not getting noncopyable from
>> there.)
>
> `MutexLockerImpl` was not intended for external subclassing, but as the internal base class for `MutexLocker`, and `ConditionalMutexLocker`.  CML was provided for exactly this kind of situation: conditionally locking the mutex.

Ok I see. I will stop using `ConditionalMutexLocker` as a base class. Instead, I'll just get rid of `NmtVirtualMemoryLocker` and use `ConditionalMutexLocker` directly.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/22745#discussion_r1888546778


More information about the hotspot-dev mailing list