comparison src/share/vm/classfile/classFileParser.cpp @ 17883:9428a0b94204

8028497: SIGSEGV at ClassLoaderData::oops_do(OopClosure*, KlassClosure*, bool) Summary: Keep class in CLD::_klasses list and mirror created for CDS classes if OOM during restore_shareable_info(). This keeps pointers consistent for CMS. Reviewed-by: ehelin, stefank, jmasa, iklam
author coleenp
date Tue, 15 Apr 2014 17:02:20 -0400
parents 9acf9c25774d
children 7e6c20c85ccf
comparison
equal deleted inserted replaced
17876:9c3dc501b5eb 17883:9428a0b94204
4168 Annotations::free_contents(_loader_data, _fields_annotations); 4168 Annotations::free_contents(_loader_data, _fields_annotations);
4169 Annotations::free_contents(_loader_data, _fields_type_annotations); 4169 Annotations::free_contents(_loader_data, _fields_type_annotations);
4170 4170
4171 clear_class_metadata(); 4171 clear_class_metadata();
4172 4172
4173 // deallocate the klass if already created. 4173 // deallocate the klass if already created. Don't directly deallocate, but add
4174 MetadataFactory::free_metadata(_loader_data, _klass); 4174 // to the deallocate list so that the klass is removed from the CLD::_klasses list
4175 // at a safepoint.
4176 if (_klass != NULL) {
4177 _loader_data->add_to_deallocate_list(_klass);
4178 }
4175 _klass = NULL; 4179 _klass = NULL;
4176 } 4180 }
4177 4181
4178 void ClassFileParser::print_field_layout(Symbol* name, 4182 void ClassFileParser::print_field_layout(Symbol* name,
4179 Array<u2>* fields, 4183 Array<u2>* fields,