< prev index next >

src/hotspot/share/runtime/biasedLocking.cpp

Print this page
rev 47287 : Port 09.17.Thread_SMR_logging_update from JDK9 to JDK10
rev 47289 : eosterlund, stefank CR - refactor code into threadSMR.cpp and threadSMR.hpp
rev 47292 : stefank, coleenp CR - refactor most JavaThreadIterator usage to use JavaThreadIteratorWithHandle.

@@ -210,13 +210,11 @@
   // Handle case where the thread toward which the object was biased has exited
   bool thread_is_alive = false;
   if (requesting_thread == biased_thread) {
     thread_is_alive = true;
   } else {
-    ThreadsListHandle tlh;
-    JavaThreadIterator jti(tlh.list());
-    for (JavaThread* cur_thread = jti.first(); cur_thread != NULL; cur_thread = jti.next()) {
+    for (JavaThreadIteratorWithHandle jtiwh; JavaThread *cur_thread = jtiwh.next(); ) {
       if (cur_thread == biased_thread) {
         thread_is_alive = true;
         break;
       }
     }

@@ -384,12 +382,11 @@
 
   Klass* k_o = o->klass();
   Klass* klass = k_o;
 
   {
-    ThreadsListHandle tlh;
-    JavaThreadIterator jti(tlh.list());
+    JavaThreadIteratorWithHandle jtiwh;
 
     if (bulk_rebias) {
       // Use the epoch in the klass of the object to implicitly revoke
       // all biases of objects of this data type and force them to be
       // reacquired. However, we also need to walk the stacks of all

@@ -405,11 +402,11 @@
         klass->set_prototype_header(klass->prototype_header()->incr_bias_epoch());
         int cur_epoch = klass->prototype_header()->bias_epoch();
 
         // Now walk all threads' stacks and adjust epochs of any biased
         // and locked objects of this data type we encounter
-        for (JavaThread* thr = jti.first(); thr != NULL; thr = jti.next()) {
+        for (; JavaThread *thr = jtiwh.next(); ) {
           GrowableArray<MonitorInfo*>* cached_monitor_info = get_or_compute_monitor_info(thr);
           for (int i = 0; i < cached_monitor_info->length(); i++) {
             MonitorInfo* mon_info = cached_monitor_info->at(i);
             oop owner = mon_info->owner();
             markOop mark = owner->mark();

@@ -437,11 +434,11 @@
       // to be revoked.
       klass->set_prototype_header(markOopDesc::prototype());
 
       // Now walk all threads' stacks and forcibly revoke the biases of
       // any locked and biased objects of this data type we encounter.
-      for (JavaThread* thr = jti.first(); thr != NULL; thr = jti.next()) {
+      for (; JavaThread *thr = jtiwh.next(); ) {
         GrowableArray<MonitorInfo*>* cached_monitor_info = get_or_compute_monitor_info(thr);
         for (int i = 0; i < cached_monitor_info->length(); i++) {
           MonitorInfo* mon_info = cached_monitor_info->at(i);
           oop owner = mon_info->owner();
           markOop mark = owner->mark();

@@ -479,13 +476,11 @@
 }
 
 
 static void clean_up_cached_monitor_info() {
   // Walk the thread list clearing out the cached monitors
-  ThreadsListHandle tlh;
-  JavaThreadIterator jti(tlh.list());
-  for (JavaThread* thr = jti.first(); thr != NULL; thr = jti.next()) {
+  for (JavaThreadIteratorWithHandle jtiwh; JavaThread *thr = jtiwh.next(); ) {
     thr->set_cached_monitor_info(NULL);
   }
 }
 
 

@@ -736,13 +731,11 @@
   _preserved_mark_stack = new (ResourceObj::C_HEAP, mtInternal) GrowableArray<markOop>(10, true);
   _preserved_oop_stack = new (ResourceObj::C_HEAP, mtInternal) GrowableArray<Handle>(10, true);
 
   ResourceMark rm;
   Thread* cur = Thread::current();
-  ThreadsListHandle tlh;
-  JavaThreadIterator jti(tlh.list());
-  for (JavaThread* thread = jti.first(); thread != NULL; thread = jti.next()) {
+  for (JavaThreadIteratorWithHandle jtiwh; JavaThread *thread = jtiwh.next(); ) {
     if (thread->has_last_Java_frame()) {
       RegisterMap rm(thread);
       for (javaVFrame* vf = thread->last_java_vframe(&rm); vf != NULL; vf = vf->java_sender()) {
         GrowableArray<MonitorInfo*> *monitors = vf->monitors();
         if (monitors != NULL) {
< prev index next >