Mercurial > hg > truffle
comparison src/share/vm/oops/methodData.hpp @ 17733:1a43981d86ea
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 | b8413a9cbb84 |
children | 606acabe7b5c |
comparison
equal
deleted
inserted
replaced
17732:8ef3428f54b6 | 17733:1a43981d86ea |
---|---|
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 } | 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 } | |
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) { |
203 _cells[index] = value; | 197 _cells[index] = value; |
1854 int _size; | 1848 int _size; |
1855 | 1849 |
1856 // Cached hint for bci_to_dp and bci_to_data | 1850 // Cached hint for bci_to_dp and bci_to_data |
1857 int _hint_di; | 1851 int _hint_di; |
1858 | 1852 |
1853 Mutex _extra_data_lock; | |
1854 | |
1859 MethodData(methodHandle method, int size, TRAPS); | 1855 MethodData(methodHandle method, int size, TRAPS); |
1860 public: | 1856 public: |
1861 static MethodData* allocate(ClassLoaderData* loader_data, methodHandle method, TRAPS); | 1857 static MethodData* allocate(ClassLoaderData* loader_data, methodHandle method, TRAPS); |
1862 MethodData() {}; // For ciMethodData | 1858 MethodData() : _extra_data_lock(Monitor::leaf, "MDO extra data lock") {}; // For ciMethodData |
1863 | 1859 |
1864 bool is_methodData() const volatile { return true; } | 1860 bool is_methodData() const volatile { return true; } |
1865 | 1861 |
1866 // Whole-method sticky bits and flags | 1862 // Whole-method sticky bits and flags |
1867 enum { | 1863 enum { |
1962 } | 1958 } |
1963 | 1959 |
1964 // What is the index of the first data entry? | 1960 // What is the index of the first data entry? |
1965 int first_di() const { return 0; } | 1961 int first_di() const { return 0; } |
1966 | 1962 |
1967 ProfileData* bci_to_extra_data_helper(int bci, Method* m, DataLayout*& dp); | 1963 ProfileData* bci_to_extra_data_helper(int bci, Method* m, DataLayout*& dp, bool concurrent); |
1968 // Find or create an extra ProfileData: | 1964 // Find or create an extra ProfileData: |
1969 ProfileData* bci_to_extra_data(int bci, Method* m, bool create_if_missing); | 1965 ProfileData* bci_to_extra_data(int bci, Method* m, bool create_if_missing); |
1970 | 1966 |
1971 // return the argument info cell | 1967 // return the argument info cell |
1972 ArgInfoData *arg_info(); | 1968 ArgInfoData *arg_info(); |