comparison src/share/vm/oops/methodData.hpp @ 14674:53ed0f89f44e

8035841: assert(dp_src->tag() == dp_dst->tag()) failed: should be same tags 1 != 0 at ciMethodData.cpp:90 Summary: concurrent update of traps with construction of ciMethodData Reviewed-by: kvn, twisti
author roland
date Wed, 05 Mar 2014 09:29:12 +0100
parents fdad2932c73f
children b51e29501f30
comparison
equal deleted inserted replaced
14671:77ca9a58fbe8 14674:53ed0f89f44e
187 return _header._struct._bci; 187 return _header._struct._bci;
188 } 188 }
189 189
190 void set_header(intptr_t value) { 190 void set_header(intptr_t value) {
191 _header._bits = value; 191 _header._bits = value;
192 }
193 bool atomic_set_header(intptr_t value) {
194 if (Atomic::cmpxchg_ptr(value, (volatile intptr_t*)&_header._bits, 0) == 0) {
195 return true;
196 }
197 return false;
198 } 192 }
199 intptr_t header() { 193 intptr_t header() {
200 return _header._bits; 194 return _header._bits;
201 } 195 }
202 void set_cell_at(int index, intptr_t value) { 196 void set_cell_at(int index, intptr_t value) {
2045 int _size; 2039 int _size;
2046 2040
2047 // Cached hint for bci_to_dp and bci_to_data 2041 // Cached hint for bci_to_dp and bci_to_data
2048 int _hint_di; 2042 int _hint_di;
2049 2043
2044 Mutex _extra_data_lock;
2045
2050 MethodData(methodHandle method, int size, TRAPS); 2046 MethodData(methodHandle method, int size, TRAPS);
2051 public: 2047 public:
2052 static MethodData* allocate(ClassLoaderData* loader_data, methodHandle method, TRAPS); 2048 static MethodData* allocate(ClassLoaderData* loader_data, methodHandle method, TRAPS);
2053 MethodData() {}; // For ciMethodData 2049 MethodData() : _extra_data_lock(Monitor::leaf, "MDO extra data lock") {}; // For ciMethodData
2054 2050
2055 bool is_methodData() const volatile { return true; } 2051 bool is_methodData() const volatile { return true; }
2056 2052
2057 // Whole-method sticky bits and flags 2053 // Whole-method sticky bits and flags
2058 enum { 2054 enum {
2153 } 2149 }
2154 2150
2155 // What is the index of the first data entry? 2151 // What is the index of the first data entry?
2156 int first_di() const { return 0; } 2152 int first_di() const { return 0; }
2157 2153
2158 ProfileData* bci_to_extra_data_helper(int bci, Method* m, DataLayout*& dp); 2154 ProfileData* bci_to_extra_data_helper(int bci, Method* m, DataLayout*& dp, bool concurrent);
2159 // Find or create an extra ProfileData: 2155 // Find or create an extra ProfileData:
2160 ProfileData* bci_to_extra_data(int bci, Method* m, bool create_if_missing); 2156 ProfileData* bci_to_extra_data(int bci, Method* m, bool create_if_missing);
2161 2157
2162 // return the argument info cell 2158 // return the argument info cell
2163 ArgInfoData *arg_info(); 2159 ArgInfoData *arg_info();