Mercurial > hg > truffle
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(); |