< prev index next >

src/share/vm/runtime/stubCodeGenerator.hpp

Print this page
rev 8555 : 8206406: StubCodeDesc constructor publishes partially-constructed objects on StubCodeDesc::_list
Reviewed-by: dholmes

*** 36,46 **** // Currently, code descriptors are simply chained in a linked list, // this may have to change if searching becomes too slow. class StubCodeDesc: public CHeapObj<mtCode> { protected: ! static StubCodeDesc* _list; // the list of all descriptors static int _count; // length of list StubCodeDesc* _next; // the next element in the linked list const char* _group; // the group to which the stub code belongs const char* _name; // the name assigned to the stub code --- 36,46 ---- // Currently, code descriptors are simply chained in a linked list, // this may have to change if searching becomes too slow. class StubCodeDesc: public CHeapObj<mtCode> { protected: ! static StubCodeDesc* volatile _list; // the list of all descriptors static int _count; // length of list StubCodeDesc* _next; // the next element in the linked list const char* _group; // the group to which the stub code belongs const char* _name; // the name assigned to the stub code
*** 67,83 **** static StubCodeDesc* desc_for_index(int); // returns the code descriptor for the index or NULL static const char* name_for(address pc); // returns the name of the code containing pc or NULL StubCodeDesc(const char* group, const char* name, address begin) { assert(name != NULL, "no name specified"); ! _next = _list; _group = group; _name = name; _index = ++_count; // (never zero) _begin = begin; _end = NULL; ! _list = this; }; const char* group() const { return _group; } const char* name() const { return _name; } int index() const { return _index; } --- 67,83 ---- static StubCodeDesc* desc_for_index(int); // returns the code descriptor for the index or NULL static const char* name_for(address pc); // returns the name of the code containing pc or NULL StubCodeDesc(const char* group, const char* name, address begin) { assert(name != NULL, "no name specified"); ! _next = (StubCodeDesc*)OrderAccess::load_ptr_acquire(&_list); _group = group; _name = name; _index = ++_count; // (never zero) _begin = begin; _end = NULL; ! OrderAccess::release_store_ptr(&_list, this); }; const char* group() const { return _group; } const char* name() const { return _name; } int index() const { return _index; }
< prev index next >