RFR: 8217450: Add PackageEntry::locked_lookup_only

Claes Redestad claes.redestad at oracle.com
Tue Jan 22 19:35:16 UTC 2019



On 2019-01-22 18:10, Lois Foltan wrote:
>>>
>>> Ok - updated http://cr.openjdk.java.net/~redestad/8217450/open.01/ in
>>> place and running some sanity tests before push.
>>>
>>> Thanks!
>>>
>>> /Claes
>>
>> Hi Claes,
>>
>> The code change in modules.cpp lines #211-214 does not look correct. 
>> PackageEntry::locked_create_entry_or_null() will return NULL if the 
>> package exists and has already been created.  The code at lines 
>> #211-214 need a PackageEntry to be successfully returned for java.base 
>> packages created during bootstrapping so we can decrement the refcount 
>> for it appropriately.
> 
> Just to clarify further.  Obtaining a PackageEntry itself is not a 
> requirement for decrementing the refcount of the Symbol* within the 
> table.  However, the assert at line #213 will trigger if 
> PackageEntry::locked_create_entry_or_null() returns NULL for an existing 
> package.  A PackageEntry can be created for any class loaded, such as 
> java/lang/Class and java/lang/Object for example, during bootstrapping 
> before java.base is defined to the JVM.  These classes are put on a 
> fixup_module_list so that once the java.base module is defined the JVM 
> can then fixup their java.lang.Module field to be correctly set to 
> java.base.

Hi Lois,

thanks for looking at this!

As you say: when locked_create_entry_or_null() returns NULL this
*should* be because the package already exists.  The assert is thus not
asserting if pkg == NULL alone, locked_lookup_only() must also return
NULL for the assert to trigger: i.e., I'm checking that a NULL really
meant that the package already existed, and not something else, such as
a failure to allocate the PackageEntry.

I thought this was the purpose of the original assert: getting a NULL
back from locked_create_entry_or_null() when we *know* there was no pre-
existing package should be impossible (we're holding the lock, so that a
NULL must be a failure to allocate or worse).

Am I missing something here?

/Claes


More information about the hotspot-runtime-dev mailing list