< prev index next >
src/hotspot/share/oops/instanceKlass.cpp
Print this page
*** 436,445 ****
--- 436,447 ----
_nest_host_index(0),
_nest_host(NULL),
_static_field_size(parser.static_field_size()),
_nonstatic_oop_map_size(nonstatic_oop_map_size(parser.total_oop_map_count())),
_itable_len(parser.itable_size()),
+ _init_thread(NULL),
+ _init_state(allocated),
_reference_type(parser.reference_type())
{
set_vtable_length(parser.vtable_size());
set_kind(kind);
set_access_flags(parser.access_flags());
*** 1069,1083 ****
--- 1071,1087 ----
void InstanceKlass::set_initialization_state_and_notify(ClassState state, TRAPS) {
Handle h_init_lock(THREAD, init_lock());
if (h_init_lock() != NULL) {
ObjectLocker ol(h_init_lock, THREAD);
+ set_init_thread(NULL); // reset _init_thread before changing _init_state
set_init_state(state);
fence_and_clear_init_lock();
ol.notify_all(CHECK);
} else {
assert(h_init_lock() != NULL, "The initialization state should never be set twice");
+ set_init_thread(NULL); // reset _init_thread before changing _init_state
set_init_state(state);
}
}
Klass* InstanceKlass::implementor() const {
*** 3708,3717 ****
--- 3712,3722 ----
#ifdef ASSERT
bool good_state = is_shared() ? (_init_state <= state)
: (_init_state < state);
assert(good_state || state == allocated, "illegal state transition");
#endif
+ assert(_init_thread == NULL, "should be cleared before state change");
_init_state = (u1)state;
}
#if INCLUDE_JVMTI
< prev index next >