changeset 18027:9f169829d0e1

Merge
author asaha
date Tue, 08 Jul 2014 13:25:13 -0700
parents 6e4bd4c906dc (current diff) f7429096a202 (diff)
children 781c4237cda7
files .hgtags make/hotspot_version src/share/vm/classfile/classFileParser.cpp
diffstat 6 files changed, 17 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/.hgtags	Wed Jul 02 15:31:10 2014 -0700
+++ b/.hgtags	Tue Jul 08 13:25:13 2014 -0700
@@ -493,3 +493,4 @@
 4f18dea0312d601d0515976bc0c643ea7acc829d hs25.20-b20
 9e4d27da4ac04c6e19291087f7c68a5c5803c7ca jdk8u20-b20
 4828415ebbf11e205dcc08e97ad5ae7dd03522f9 jdk8u20-b21
+e4a6e7f1b90b85270aee1c54edaca3ef737082f1 hs25.20-b21
--- a/make/hotspot_version	Wed Jul 02 15:31:10 2014 -0700
+++ b/make/hotspot_version	Tue Jul 08 13:25:13 2014 -0700
@@ -35,7 +35,7 @@
 
 HS_MAJOR_VER=25
 HS_MINOR_VER=20
-HS_BUILD_NUMBER=20
+HS_BUILD_NUMBER=21
 
 JDK_MAJOR_VER=1
 JDK_MINOR_VER=8
--- a/src/share/vm/classfile/classFileParser.cpp	Wed Jul 02 15:31:10 2014 -0700
+++ b/src/share/vm/classfile/classFileParser.cpp	Tue Jul 08 13:25:13 2014 -0700
@@ -4038,6 +4038,11 @@
     this_klass->set_major_version(major_version);
     this_klass->set_has_default_methods(has_default_methods);
 
+    if (!host_klass.is_null()) {
+      assert (this_klass->is_anonymous(), "should be the same");
+      this_klass->set_host_klass(host_klass());
+    }
+
     // Set up Method*::intrinsic_id as soon as we know the names of methods.
     // (We used to do this lazily, but now we query it in Rewriter,
     // which is eagerly done for every method, so we might as well do it now,
--- a/src/share/vm/classfile/classLoaderData.cpp	Wed Jul 02 15:31:10 2014 -0700
+++ b/src/share/vm/classfile/classLoaderData.cpp	Tue Jul 08 13:25:13 2014 -0700
@@ -531,6 +531,7 @@
 // GC root of class loader data created.
 ClassLoaderData* ClassLoaderDataGraph::_head = NULL;
 ClassLoaderData* ClassLoaderDataGraph::_unloading = NULL;
+ClassLoaderData* ClassLoaderDataGraph::_saved_unloading = NULL;
 ClassLoaderData* ClassLoaderDataGraph::_saved_head = NULL;
 
 bool ClassLoaderDataGraph::_should_purge = false;
@@ -628,7 +629,9 @@
 
 void ClassLoaderDataGraph::classes_unloading_do(void f(Klass* const)) {
   assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint!");
-  for (ClassLoaderData* cld = _unloading; cld != NULL; cld = cld->next()) {
+  // Only walk the head until any clds not purged from prior unloading
+  // (CMS doesn't purge right away).
+  for (ClassLoaderData* cld = _unloading; cld != _saved_unloading; cld = cld->next()) {
     cld->classes_do(f);
   }
 }
@@ -676,6 +679,11 @@
   ClassLoaderData* data = _head;
   ClassLoaderData* prev = NULL;
   bool seen_dead_loader = false;
+
+  // Save previous _unloading pointer for CMS which may add to unloading list before
+  // purging and we don't want to rewalk the previously unloaded class loader data.
+  _saved_unloading = _unloading;
+
   // mark metadata seen on the stack and code cache so we can delete
   // unneeded entries.
   bool has_redefined_a_class = JvmtiExport::has_redefined_a_class();
--- a/src/share/vm/classfile/classLoaderData.hpp	Wed Jul 02 15:31:10 2014 -0700
+++ b/src/share/vm/classfile/classLoaderData.hpp	Tue Jul 08 13:25:13 2014 -0700
@@ -66,6 +66,7 @@
   static ClassLoaderData* _unloading;
   // CMS support.
   static ClassLoaderData* _saved_head;
+  static ClassLoaderData* _saved_unloading;
   static bool _should_purge;
 
   static ClassLoaderData* add(Handle class_loader, bool anonymous, TRAPS);
--- a/src/share/vm/classfile/systemDictionary.cpp	Wed Jul 02 15:31:10 2014 -0700
+++ b/src/share/vm/classfile/systemDictionary.cpp	Tue Jul 08 13:25:13 2014 -0700
@@ -997,7 +997,6 @@
 
   if (host_klass.not_null() && k.not_null()) {
     assert(EnableInvokeDynamic, "");
-    k->set_host_klass(host_klass());
     // If it's anonymous, initialize it now, since nobody else will.
 
     {