< prev index next >
src/hotspot/share/runtime/init.cpp
Print this page
*** 34,43 ****
--- 34,44 ----
#include "prims/methodHandles.hpp"
#include "runtime/flags/jvmFlag.hpp"
#include "runtime/handles.inline.hpp"
#include "runtime/icache.hpp"
#include "runtime/init.hpp"
+ #include "runtime/orderAccess.hpp"
#include "runtime/safepoint.hpp"
#include "runtime/sharedRuntime.hpp"
#include "services/memTracker.hpp"
#include "utilities/macros.hpp"
*** 184,196 ****
}
static volatile bool _init_completed = false;
bool is_init_completed() {
! return _init_completed;
}
void set_init_completed() {
assert(Universe::is_fully_initialized(), "Should have completed initialization");
! _init_completed = true;
}
--- 185,205 ----
}
static volatile bool _init_completed = false;
bool is_init_completed() {
! return OrderAccess::load_acquire(&_init_completed);
}
+ void wait_init_completed() {
+ MonitorLockerEx ml(InitCompleted_lock, Monitor::_no_safepoint_check_flag);
+ while (!_init_completed) {
+ ml.wait(Monitor::_no_safepoint_check_flag);
+ }
+ }
void set_init_completed() {
assert(Universe::is_fully_initialized(), "Should have completed initialization");
! MonitorLockerEx ml(InitCompleted_lock, Monitor::_no_safepoint_check_flag);
! OrderAccess::release_store(&_init_completed, true);
! ml.notify_all();
}
< prev index next >