RFR (S) 8016075 - Win32 crash with CDS enabled and small heap size

Christian Thalinger christian.thalinger at oracle.com
Thu Jun 27 11:07:33 PDT 2013


On Jun 27, 2013, at 9:19 AM, Ioi Lam <ioi.lam at oracle.com> wrote:

> Chris, 
> 
> is it OK for me to send you a patch instead? Currently we are not calling this function during dump time and I don't want to commit any code that has not been tested.

Sure.  This was more a general question than a review comment.  Sorry, I should have made this clear.

-- Chris

> 
> Harold,
> 
> Thanks for the comment. I will modify it as you said.
> 
> - Ioi
> 
> 
> On 06/27/2013 09:02 AM, Christian Thalinger wrote:
>> 
>> On Jun 27, 2013, at 6:42 AM, harold seigel <harold.seigel at oracle.com> wrote:
>> 
>>> Hi Ioi,
>>> 
>>> The changes look good. 
>>> 
>>> You can simplify MetaspaceShared::is_in_shared_space(...) to something like:
>>> // Return true if given address is in the mapped shared space.
>>> bool MetaspaceShared::is_in_shared_space(const void* p) {
>>>   return UseSharedSpaces && FileMapInfo::current_info()->is_in_shared_space(p);
>>> }
>> 
>> Would it be possible to change that method to also return a valid answer when dumping shared spaces?  I'd need this for something else I'm working on.
>> 
>> -- Chris
>>> 
>>> Thanks, Harold
>>> 
>>> On 6/27/2013 12:10 AM, Ioi Lam wrote:
>>>> Please review a small fix:
>>>> 
>>>>     http://cr.openjdk.java.net/~iklam/8016075/cds_is_shared_crash_003/
>>>> 
>>>> Bug: Win32 crash with CDS enabled and small heap size
>>>> 
>>>>     http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=8016075
>>>>     https://jbs.oracle.com/bugs/browse/JDK-8016075
>>>> 
>>>> Summary of fix:
>>>> 
>>>>     The function MetaspaceShared::is_in_shared_space() was testing with
>>>>     incorrect bounds. As a resullt, a dynamically loaded InstanceKlass
>>>>     was incorrectly identified as an InstanceKlass stored in the CDS
>>>>     archive. This caused the following code to fail:
>>>> 
>>>>     bool InstanceKlass::link_class_impl(...) {
>>>>       ...
>>>>       if (!this_oop()->is_shared()) {
>>>>         ResourceMark rm(THREAD);
>>>>         this_oop->vtable()->initialize_vtable(true, CHECK_false); //<< failed to execute
>>>>         this_oop->itable()->initialize_itable(true, CHECK_false);
>>>>       }
>>>> 
>>>>     Hence, Method::vtable_index() could return an incorrect value for some
>>>>     Methods, leading to various mysterious crashes.
>>>> 
>>>>     The fix is for MetaspaceShared::is_in_shared_space() to consider the actual used
>>>>     spaces in the CDS archive regions.
>>>> 
>>>> Tests:
>>>> 
>>>>     JPRT
>>>>     UTE (vm.runtime.testlist, vm.quick.testlist, vm.parallel_class_loading.testlist)
>>>> 
>>>> Thanks
>>>> - Ioi
>>>> 
>>>> 
>>>> 
>>> 
>> 
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/hotspot-runtime-dev/attachments/20130627/bae90a8e/attachment.html 


More information about the hotspot-runtime-dev mailing list