1.1 --- a/src/share/vm/classfile/classFileParser.cpp Wed Oct 14 16:43:13 2020 +0800 1.2 +++ b/src/share/vm/classfile/classFileParser.cpp Wed Oct 14 17:44:48 2020 +0800 1.3 @@ -3884,14 +3884,14 @@ 1.4 access_flags.set_flags(flags); 1.5 1.6 // This class and superclass 1.7 - u2 this_class_index = cfs->get_u2_fast(); 1.8 + _this_class_index = cfs->get_u2_fast(); 1.9 check_property( 1.10 - valid_cp_range(this_class_index, cp_size) && 1.11 - cp->tag_at(this_class_index).is_unresolved_klass(), 1.12 + valid_cp_range(_this_class_index, cp_size) && 1.13 + cp->tag_at(_this_class_index).is_unresolved_klass(), 1.14 "Invalid this class index %u in constant pool in class file %s", 1.15 - this_class_index, CHECK_(nullHandle)); 1.16 - 1.17 - Symbol* class_name = cp->unresolved_klass_at(this_class_index); 1.18 + _this_class_index, CHECK_(nullHandle)); 1.19 + 1.20 + Symbol* class_name = cp->unresolved_klass_at(_this_class_index); 1.21 assert(class_name != NULL, "class_name can't be null"); 1.22 1.23 // It's important to set parsed_name *before* resolving the super class. 1.24 @@ -4122,9 +4122,9 @@ 1.25 // that changes, then InstanceKlass::idnum_can_increment() 1.26 // has to be changed accordingly. 1.27 this_klass->set_initial_method_idnum(methods->length()); 1.28 - this_klass->set_name(cp->klass_name_at(this_class_index)); 1.29 + this_klass->set_name(cp->klass_name_at(_this_class_index)); 1.30 if (is_anonymous()) // I am well known to myself 1.31 - cp->klass_at_put(this_class_index, this_klass()); // eagerly resolve 1.32 + cp->klass_at_put(_this_class_index, this_klass()); // eagerly resolve 1.33 1.34 this_klass->set_minor_version(minor_version); 1.35 this_klass->set_major_version(major_version); 1.36 @@ -4262,6 +4262,8 @@ 1.37 preserve_this_klass = this_klass(); 1.38 } 1.39 1.40 + JFR_ONLY(INIT_ID(preserve_this_klass);) 1.41 + 1.42 // Create new handle outside HandleMark (might be needed for 1.43 // Extended Class Redefinition) 1.44 instanceKlassHandle this_klass (THREAD, preserve_this_klass); 1.45 @@ -5273,3 +5275,25 @@ 1.46 } 1.47 return NULL; 1.48 } 1.49 + 1.50 +#if INCLUDE_JFR 1.51 + 1.52 +// Caller responsible for ResourceMark 1.53 +// clone stream with rewound position 1.54 +ClassFileStream* ClassFileParser::clone_stream() const { 1.55 + assert(_stream != NULL, "invariant"); 1.56 + 1.57 + return _stream->clone(); 1.58 +} 1.59 + 1.60 +void ClassFileParser::set_klass_to_deallocate(InstanceKlass* klass) { 1.61 +#ifdef ASSERT 1.62 + if (klass != NULL) { 1.63 + assert(NULL == _klass, "leaking?"); 1.64 + } 1.65 +#endif 1.66 + 1.67 + _klass = klass; 1.68 +} 1.69 + 1.70 +#endif // INCLUDE_JFR