RFR(S): 8185694: Replace SystemDictionaryShared::_java_platform_loader with SystemDictionary::is_platform_class_loader()
David Holmes
david.holmes at oracle.com
Wed Oct 4 21:41:39 UTC 2017
Hi Calvin,
On 5/10/2017 3:12 AM, Calvin Cheung wrote:
> Mandy, David,
>
> Thanks for the review.
>
> I've made the change based on your suggestion:
> http://cr.openjdk.java.net/~ccheung/8185694/webrev.01/
share/classfile/systemDictionary.cpp
There's an existing bug that this local is not used:
132 Klass* system_klass = WK_KLASS(ClassLoader_klass);
(and the variable is poorly named). Now that you need to use
WK_KLASS(ClassLoader_klass) twice you should instead use the local.
---
As Mandy alludes these:
177 // Returns true if the passed class loader is the builtin
application class loader
178 // or a custom system class loader. A customer system class loader
can be
179 // specified via -Djava.system.class.loader.
180 bool SystemDictionary::is_system_class_loader(oop class_loader) {
181 if (class_loader == NULL) {
182 return false;
183 }
184 return (class_loader->klass() ==
SystemDictionary::jdk_internal_loader_ClassLoaders_AppClassLoader_klass() ||
185 class_loader == _java_system_loader);
186 }
187
188 // Returns true if the passed class loader is the platform class
loader.
189 bool SystemDictionary::is_platform_class_loader(oop class_loader) {
190 if (class_loader == NULL) {
191 return false;
192 }
193 return (class_loader->klass() ==
SystemDictionary::jdk_internal_loader_ClassLoaders_PlatformClassLoader_klass());
194 }
would seem to be checking the wrong things - they should just be
checking java_system_loader() and java_platform_loader() shouldn't they?
In the case of is_system_class_loader() it seems odd that it checks a
specific hard-wired class as well as the defined _java_system_loader ??
Thanks,
David
-----
> thanks,
> Calvin
>
> On 10/4/17, 8:29 AM, mandy chung wrote:
>>
>>
>> On 10/3/17 11:36 PM, David Holmes wrote:
>>> Hi Calvin,
>>>
>>> On 4/10/2017 7:26 AM, Calvin Cheung wrote:
>>>> bug: https://bugs.openjdk.java.net/browse/JDK-8185694
>>>>
>>>> The open code change for this fix involves adding the
>>>> _java_platform_loader to the SystemDictionary class.
>>>>
>>>> webrev: http://cr.openjdk.java.net/~ccheung/8185694/webrev.00/
>>>
>>> I think you should be calling getPlatformClassLoader rather than
>>> poking at the parent field of the system loader. That way you don't
>>> have to worry about whether or not the system loader has been
>>> customized by the user.
>> Agree. ClassLoader::getPlatformClassLoader is the right way to get
>> the platform class loader.
>>
>> Mandy
More information about the hotspot-runtime-dev
mailing list