< prev index next >

src/share/vm/runtime/thread.cpp

Print this page
rev 13387 : [mq]: parallel_sp_cleaning.patch

@@ -789,11 +789,12 @@
   active_handles()->oops_do(f);
   // Do oop for ThreadShadow
   f->do_oop((oop*)&_pending_exception);
   handle_area()->oops_do(f);
   if (MonitorInUseLists) {
-    if (Universe::heap()->supports_per_thread_monitor_deflation()) {
+    VM_Operation* op = VMThread::vm_operation();
+    if (op != NULL && op->deflates_idle_monitors()) {
       ObjectSynchronizer::deflate_idle_monitors_and_oops_do(this, f);
     } else {
       ObjectSynchronizer::thread_local_used_oops_do(this, f);
     }
   }

@@ -4389,15 +4390,22 @@
            "Thread " PTR_FORMAT " has incorrect parity %d != %d", p2i(p), thread_parity, _thread_claim_parity);
   }
 }
 #endif // ASSERT
 
-void Threads::possibly_parallel_oops_do(bool is_par, OopClosure* f, CodeBlobClosure* cf) {
+void Threads::possibly_parallel_oops_do(bool is_par, OopClosure* f, CodeBlobClosure* cf, CodeBlobClosure* nmethods_cl) {
+  CodeBlobClosure* blobs;
+  VM_Operation* op = VMThread::vm_operation();
+  if (op != NULL && op->marks_nmethods()) {
+  }
   int cp = Threads::thread_claim_parity();
   ALL_JAVA_THREADS(p) {
     if (p->claim_oops_do(is_par, cp)) {
       p->oops_do(f, cf);
+      if (nmethods_cl != NULL && ! p->is_Code_cache_sweeper_thread()) {
+        p->nmethods_do(nmethods_cl);
+      }
     }
   }
   VMThread* vmt = VMThread::vm_thread();
   if (vmt->claim_oops_do(is_par, cp)) {
     vmt->oops_do(f, cf);
< prev index next >