Please review (S): fix placeholder table entry cleanup

Karen Kinnear karen.kinnear at oracle.com
Fri Oct 12 05:18:29 PDT 2012


David,

That was exactly my initial concern when Stefan proposed the cleanup in handle_parallel_super...
Which is why I spent days pouring over the logic and assumptions again in great detail and I
will send you the details of my current understanding - but it will be later today since I need to
summarize it. It would be good to sanity check this with your understanding.

thanks,
Karen

On Oct 12, 2012, at 4:37 AM, David Holmes wrote:

> Actually thinking more about this I'm unsure of this fix. I understand it will now clean up in a case where previously it didn't. But isn't there also a risk that the placeholder entry will be removed prematurely by a thread encountering a stackoverflow?
> 
> David
> 
> On 12/10/2012 5:51 PM, David Holmes wrote:
>> Hi Karen,
>> 
>> On 12/10/2012 4:04 AM, Karen Kinnear wrote:
>>> 
>>> Fix to clean up placeholdertable entries in stackoverflow conditions.
>>> 
>>> webrev: http://cr.openjdk.java.net/~acorn/7199207/webrev
>> 
>> So the basic problem is that the thread nominally responsible for
>> cleaning up the placeholder doesn't because a StackOverflow causes the
>> call to resolve_or_fail to issue a return (via the CHECK_ macro) that
>> skips the cleanup - right?
>> 
>> So here:
>> 
>> 1263 resolve_super_or_fail(class_name, name, class_loader, Handle(),
>> false, CHECK_(nh));
>> 1264 }
>> 1265 // Caller's of resolve_super_or_fail need to clean up child's
>> placeholder entry
>> 1266 // Because define class path needs to track entry until
>> systemDictionary entry created
>> 
>> don't we need to change the CHECK_(nh) to just THREAD as is done in
>> handle_parallel_super_load() ?
>> 
>> Also if we're running out of stack do we know that we have enough stack
>> to perform this cleanup work? If we don't will we abort instead?
>> 
>> Looking at the miscellaneous comment updates I notice that here:
>> 
>> 442 / 867/ 915 // SystemDictionary::do_unloading() asserts that classes
>> in the SD are only
>> 
>> we make a claim about an assertion, but in the actual code for
>> SystemDictionary::do_unloading there is no direct assertion (I know you
>> only added the "in the SD" part :) )
>> 
>> 1790 // Assumes classes in the SystemDictionary are only unloaded at a
>> safepoint
>> 1791 // Note: anonymous classes are not in the SD
>> 
>> Is it an assumption or requirement? Should 1791 add "and so are not
>> unloaded by this method" ? Do anonymous classes deserve some more
>> in-depth commentary somewhere in here?
>> 
>> Cheers,
>> David
>> 
>>> bug link: https://jbs.oracle.com/bugs/browse/JDK-7199207
>>> 
>>> Thanks to Stefan Karlsson for identifying the problem and
>>> the initial fix.
>>> 
>>> Tests run:
>>> Originally reported chain007 with ThreadStackSize=128 and
>>> original options.
>>> 
>>> vm.quick.testlist
>>> vm.parallel_class_loading.testlist
>>> jck: non-interactive jck, api, lang
>>> jtreg: java.lang.instrument
>>> RunThese full
>>> ctw nightly.testlist
>>> 
>>> thanks,
>>> Karen
>>> 
>>> 



More information about the hotspot-runtime-dev mailing list