changeset 7302:0643c076b6c3

Merge
author iveresov
date Tue, 14 Apr 2015 19:45:47 +0000
parents f79d8e8caecb bd8725e80355
children 713dfbf84b10
files
diffstat 3 files changed, 10 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/vm/classfile/classLoaderData.cpp	Fri Apr 10 15:27:05 2015 -0700
+++ b/src/share/vm/classfile/classLoaderData.cpp	Tue Apr 14 19:45:47 2015 +0000
@@ -882,7 +882,7 @@
 }
 
 Klass* ClassLoaderDataGraphKlassIteratorAtomic::next_klass() {
-  Klass* head = (Klass*)_next_klass;
+  Klass* head = _next_klass;
 
   while (head != NULL) {
     Klass* next = next_klass_in_cldg(head);
--- a/src/share/vm/classfile/classLoaderData.hpp	Fri Apr 10 15:27:05 2015 -0700
+++ b/src/share/vm/classfile/classLoaderData.hpp	Tue Apr 14 19:45:47 2015 +0000
@@ -307,7 +307,7 @@
 
 // An iterator that distributes Klasses to parallel worker threads.
 class ClassLoaderDataGraphKlassIteratorAtomic : public StackObj {
-  volatile Klass* _next_klass;
+ Klass* volatile _next_klass;
  public:
   ClassLoaderDataGraphKlassIteratorAtomic();
   Klass* next_klass();
--- a/src/share/vm/gc_implementation/g1/g1RootProcessor.cpp	Fri Apr 10 15:27:05 2015 -0700
+++ b/src/share/vm/gc_implementation/g1/g1RootProcessor.cpp	Tue Apr 14 19:45:47 2015 +0000
@@ -93,11 +93,13 @@
   uint n_workers = _g1h->n_par_threads();
   assert(ClassUnloadingWithConcurrentMark, "Currently only needed when doing G1 Class Unloading");
 
-  uint new_value = (uint)Atomic::add(1, &_n_workers_discovered_strong_classes);
-  if (new_value == n_workers) {
-    // This thread is last. Notify the others.
-    MonitorLockerEx ml(&_lock, Mutex::_no_safepoint_check_flag);
-    _lock.notify_all();
+  if (n_workers > 0) {
+    uint new_value = (uint)Atomic::add(1, &_n_workers_discovered_strong_classes);
+    if (new_value == n_workers) {
+      // This thread is last. Notify the others.
+      MonitorLockerEx ml(&_lock, Mutex::_no_safepoint_check_flag);
+      _lock.notify_all();
+    }
   }
 }
 
@@ -105,7 +107,7 @@
   uint n_workers = _g1h->n_par_threads();
   assert(ClassUnloadingWithConcurrentMark, "Currently only needed when doing G1 Class Unloading");
 
-  if ((uint)_n_workers_discovered_strong_classes != n_workers) {
+  if (n_workers > 0 && (uint)_n_workers_discovered_strong_classes != n_workers) {
     MonitorLockerEx ml(&_lock, Mutex::_no_safepoint_check_flag);
     while ((uint)_n_workers_discovered_strong_classes != n_workers) {
       _lock.wait(Mutex::_no_safepoint_check_flag, 0, false);