equal
deleted
inserted
replaced
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); |