src/hotspot/share/runtime/thread.cpp
changeset 59247 56bf71d64d51
parent 59132 189f47d990b5
child 59252 623722a6aeb9
equal deleted inserted replaced
59246:fcad92f425c5 59247:56bf71d64d51
  1267 
  1267 
  1268 NonJavaThread::List NonJavaThread::_the_list;
  1268 NonJavaThread::List NonJavaThread::_the_list;
  1269 
  1269 
  1270 NonJavaThread::Iterator::Iterator() :
  1270 NonJavaThread::Iterator::Iterator() :
  1271   _protect_enter(_the_list._protect.enter()),
  1271   _protect_enter(_the_list._protect.enter()),
  1272   _current(OrderAccess::load_acquire(&_the_list._head))
  1272   _current(Atomic::load_acquire(&_the_list._head))
  1273 {}
  1273 {}
  1274 
  1274 
  1275 NonJavaThread::Iterator::~Iterator() {
  1275 NonJavaThread::Iterator::~Iterator() {
  1276   _the_list._protect.exit(_protect_enter);
  1276   _the_list._protect.exit(_protect_enter);
  1277 }
  1277 }
  1278 
  1278 
  1279 void NonJavaThread::Iterator::step() {
  1279 void NonJavaThread::Iterator::step() {
  1280   assert(!end(), "precondition");
  1280   assert(!end(), "precondition");
  1281   _current = OrderAccess::load_acquire(&_current->_next);
  1281   _current = Atomic::load_acquire(&_current->_next);
  1282 }
  1282 }
  1283 
  1283 
  1284 NonJavaThread::NonJavaThread() : Thread(), _next(NULL) {
  1284 NonJavaThread::NonJavaThread() : Thread(), _next(NULL) {
  1285   assert(BarrierSet::barrier_set() != NULL, "NonJavaThread created too soon!");
  1285   assert(BarrierSet::barrier_set() != NULL, "NonJavaThread created too soon!");
  1286 }
  1286 }
  1289 
  1289 
  1290 void NonJavaThread::add_to_the_list() {
  1290 void NonJavaThread::add_to_the_list() {
  1291   MutexLocker ml(NonJavaThreadsList_lock, Mutex::_no_safepoint_check_flag);
  1291   MutexLocker ml(NonJavaThreadsList_lock, Mutex::_no_safepoint_check_flag);
  1292   // Initialize BarrierSet-related data before adding to list.
  1292   // Initialize BarrierSet-related data before adding to list.
  1293   BarrierSet::barrier_set()->on_thread_attach(this);
  1293   BarrierSet::barrier_set()->on_thread_attach(this);
  1294   OrderAccess::release_store(&_next, _the_list._head);
  1294   Atomic::release_store(&_next, _the_list._head);
  1295   OrderAccess::release_store(&_the_list._head, this);
  1295   Atomic::release_store(&_the_list._head, this);
  1296 }
  1296 }
  1297 
  1297 
  1298 void NonJavaThread::remove_from_the_list() {
  1298 void NonJavaThread::remove_from_the_list() {
  1299   {
  1299   {
  1300     MutexLocker ml(NonJavaThreadsList_lock, Mutex::_no_safepoint_check_flag);
  1300     MutexLocker ml(NonJavaThreadsList_lock, Mutex::_no_safepoint_check_flag);