src/share/vm/oops/instanceKlass.cpp

Print this page

        

*** 845,855 **** void instanceKlass::shared_symbols_iterate(SymbolClosure* closure) { Klass::shared_symbols_iterate(closure); closure->do_symbol(&_generic_signature); closure->do_symbol(&_source_file_name); - closure->do_symbol(&_source_debug_extension); for (JavaFieldStream fs(this); !fs.done(); fs.next()) { int name_index = fs.name_index(); closure->do_symbol(constants()->symbol_at_addr(name_index)); int sig_index = fs.signature_index(); --- 845,854 ----
*** 1942,1964 **** if (_name != NULL) _name->decrement_refcount(); // unreference array name derived from this class name (arrays of an unloaded // class can't be referenced anymore). if (_array_name != NULL) _array_name->decrement_refcount(); if (_source_file_name != NULL) _source_file_name->decrement_refcount(); - if (_source_debug_extension != NULL) _source_debug_extension->decrement_refcount(); // walk constant pool and decrement symbol reference counts _constants->unreference_symbols(); } void instanceKlass::set_source_file_name(Symbol* n) { _source_file_name = n; if (_source_file_name != NULL) _source_file_name->increment_refcount(); } ! void instanceKlass::set_source_debug_extension(Symbol* n) { ! _source_debug_extension = n; ! if (_source_debug_extension != NULL) _source_debug_extension->increment_refcount(); } address instanceKlass::static_field_addr(int offset) { return (address)(offset + instanceMirrorKlass::offset_of_static_fields() + (intptr_t)java_mirror()); } --- 1941,1977 ---- if (_name != NULL) _name->decrement_refcount(); // unreference array name derived from this class name (arrays of an unloaded // class can't be referenced anymore). if (_array_name != NULL) _array_name->decrement_refcount(); if (_source_file_name != NULL) _source_file_name->decrement_refcount(); // walk constant pool and decrement symbol reference counts _constants->unreference_symbols(); + + if (_source_debug_extension != NULL) FREE_C_HEAP_ARRAY(u1, _source_debug_extension, mtClass); } void instanceKlass::set_source_file_name(Symbol* n) { _source_file_name = n; if (_source_file_name != NULL) _source_file_name->increment_refcount(); } ! void instanceKlass::set_source_debug_extension(char* array, int length) { ! if (array == NULL) { ! _source_debug_extension = NULL; ! } else { ! // Adding one to the attribute length in order to store a null terminator ! // character could cause an overflow because the attribute length is ! // already coded with an u4 in the classfile, but in practice, it's ! // unlikely to happen. ! assert((length+1) > length, "Overflow checking"); ! char* sde = NEW_C_HEAP_ARRAY(char, (length + 1), mtClass); ! for (int i = 0; i < length; i++) { ! sde[i] = array[i]; ! } ! sde[length] = '\0'; ! _source_debug_extension = (char*)sde; ! } } address instanceKlass::static_field_addr(int offset) { return (address)(offset + instanceMirrorKlass::offset_of_static_fields() + (intptr_t)java_mirror()); }