equal
deleted
inserted
replaced
34 #include "prims/methodHandles.hpp" |
34 #include "prims/methodHandles.hpp" |
35 #include "runtime/flags/jvmFlag.hpp" |
35 #include "runtime/flags/jvmFlag.hpp" |
36 #include "runtime/handles.inline.hpp" |
36 #include "runtime/handles.inline.hpp" |
37 #include "runtime/icache.hpp" |
37 #include "runtime/icache.hpp" |
38 #include "runtime/init.hpp" |
38 #include "runtime/init.hpp" |
|
39 #include "runtime/orderAccess.hpp" |
39 #include "runtime/safepoint.hpp" |
40 #include "runtime/safepoint.hpp" |
40 #include "runtime/sharedRuntime.hpp" |
41 #include "runtime/sharedRuntime.hpp" |
41 #include "services/memTracker.hpp" |
42 #include "services/memTracker.hpp" |
42 #include "utilities/macros.hpp" |
43 #include "utilities/macros.hpp" |
43 |
44 |
184 } |
185 } |
185 |
186 |
186 static volatile bool _init_completed = false; |
187 static volatile bool _init_completed = false; |
187 |
188 |
188 bool is_init_completed() { |
189 bool is_init_completed() { |
189 return _init_completed; |
190 return OrderAccess::load_acquire(&_init_completed); |
190 } |
191 } |
191 |
192 |
|
193 void wait_init_completed() { |
|
194 MonitorLockerEx ml(InitCompleted_lock, Monitor::_no_safepoint_check_flag); |
|
195 while (!_init_completed) { |
|
196 ml.wait(Monitor::_no_safepoint_check_flag); |
|
197 } |
|
198 } |
192 |
199 |
193 void set_init_completed() { |
200 void set_init_completed() { |
194 assert(Universe::is_fully_initialized(), "Should have completed initialization"); |
201 assert(Universe::is_fully_initialized(), "Should have completed initialization"); |
195 _init_completed = true; |
202 MonitorLockerEx ml(InitCompleted_lock, Monitor::_no_safepoint_check_flag); |
196 } |
203 OrderAccess::release_store(&_init_completed, true); |
|
204 ml.notify_all(); |
|
205 } |