comparison src/share/vm/oops/constMethodKlass.cpp @ 518:0af8b0718fc9

6692899: CMS: many vm.parallel_class_loading tests fail with assert "missing Printezis mark" Summary: The CMS concurrent precleaning and concurrent marking phases should work around classes that are undergoing redefinition. Reviewed-by: ysr, dcubed
author jmasa
date Sun, 11 Jan 2009 16:58:24 -0800
parents a61af66fc99e
children 0fbdb4381b99
comparison
equal deleted inserted replaced
517:e9be0e04635a 518:0af8b0718fc9
47 bool constMethodKlass::oop_is_parsable(oop obj) const { 47 bool constMethodKlass::oop_is_parsable(oop obj) const {
48 assert(obj->is_constMethod(), "must be constMethod oop"); 48 assert(obj->is_constMethod(), "must be constMethod oop");
49 return constMethodOop(obj)->object_is_parsable(); 49 return constMethodOop(obj)->object_is_parsable();
50 } 50 }
51 51
52 bool constMethodKlass::oop_is_conc_safe(oop obj) const {
53 assert(obj->is_constMethod(), "must be constMethod oop");
54 return constMethodOop(obj)->is_conc_safe();
55 }
56
52 constMethodOop constMethodKlass::allocate(int byte_code_size, 57 constMethodOop constMethodKlass::allocate(int byte_code_size,
53 int compressed_line_number_size, 58 int compressed_line_number_size,
54 int localvariable_table_length, 59 int localvariable_table_length,
55 int checked_exceptions_length, 60 int checked_exceptions_length,
61 bool is_conc_safe,
56 TRAPS) { 62 TRAPS) {
57 63
58 int size = constMethodOopDesc::object_size(byte_code_size, 64 int size = constMethodOopDesc::object_size(byte_code_size,
59 compressed_line_number_size, 65 compressed_line_number_size,
60 localvariable_table_length, 66 localvariable_table_length,
73 cm->set_constMethod_size(size); 79 cm->set_constMethod_size(size);
74 cm->set_inlined_tables_length(checked_exceptions_length, 80 cm->set_inlined_tables_length(checked_exceptions_length,
75 compressed_line_number_size, 81 compressed_line_number_size,
76 localvariable_table_length); 82 localvariable_table_length);
77 assert(cm->size() == size, "wrong size for object"); 83 assert(cm->size() == size, "wrong size for object");
84 cm->set_is_conc_safe(is_conc_safe);
78 cm->set_partially_loaded(); 85 cm->set_partially_loaded();
79 assert(cm->is_parsable(), "Is safely parsable by gc"); 86 assert(cm->is_parsable(), "Is safely parsable by gc");
80 return cm; 87 return cm;
81 } 88 }
82 89