Tue, 08 Jul 2014 13:25:13 -0700
Merge
1.1 --- a/.hgtags Wed Jul 02 15:31:10 2014 -0700 1.2 +++ b/.hgtags Tue Jul 08 13:25:13 2014 -0700 1.3 @@ -493,3 +493,4 @@ 1.4 4f18dea0312d601d0515976bc0c643ea7acc829d hs25.20-b20 1.5 9e4d27da4ac04c6e19291087f7c68a5c5803c7ca jdk8u20-b20 1.6 4828415ebbf11e205dcc08e97ad5ae7dd03522f9 jdk8u20-b21 1.7 +e4a6e7f1b90b85270aee1c54edaca3ef737082f1 hs25.20-b21
2.1 --- a/make/hotspot_version Wed Jul 02 15:31:10 2014 -0700 2.2 +++ b/make/hotspot_version Tue Jul 08 13:25:13 2014 -0700 2.3 @@ -35,7 +35,7 @@ 2.4 2.5 HS_MAJOR_VER=25 2.6 HS_MINOR_VER=20 2.7 -HS_BUILD_NUMBER=20 2.8 +HS_BUILD_NUMBER=21 2.9 2.10 JDK_MAJOR_VER=1 2.11 JDK_MINOR_VER=8
3.1 --- a/src/share/vm/classfile/classFileParser.cpp Wed Jul 02 15:31:10 2014 -0700 3.2 +++ b/src/share/vm/classfile/classFileParser.cpp Tue Jul 08 13:25:13 2014 -0700 3.3 @@ -4038,6 +4038,11 @@ 3.4 this_klass->set_major_version(major_version); 3.5 this_klass->set_has_default_methods(has_default_methods); 3.6 3.7 + if (!host_klass.is_null()) { 3.8 + assert (this_klass->is_anonymous(), "should be the same"); 3.9 + this_klass->set_host_klass(host_klass()); 3.10 + } 3.11 + 3.12 // Set up Method*::intrinsic_id as soon as we know the names of methods. 3.13 // (We used to do this lazily, but now we query it in Rewriter, 3.14 // which is eagerly done for every method, so we might as well do it now,
4.1 --- a/src/share/vm/classfile/classLoaderData.cpp Wed Jul 02 15:31:10 2014 -0700 4.2 +++ b/src/share/vm/classfile/classLoaderData.cpp Tue Jul 08 13:25:13 2014 -0700 4.3 @@ -531,6 +531,7 @@ 4.4 // GC root of class loader data created. 4.5 ClassLoaderData* ClassLoaderDataGraph::_head = NULL; 4.6 ClassLoaderData* ClassLoaderDataGraph::_unloading = NULL; 4.7 +ClassLoaderData* ClassLoaderDataGraph::_saved_unloading = NULL; 4.8 ClassLoaderData* ClassLoaderDataGraph::_saved_head = NULL; 4.9 4.10 bool ClassLoaderDataGraph::_should_purge = false; 4.11 @@ -628,7 +629,9 @@ 4.12 4.13 void ClassLoaderDataGraph::classes_unloading_do(void f(Klass* const)) { 4.14 assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint!"); 4.15 - for (ClassLoaderData* cld = _unloading; cld != NULL; cld = cld->next()) { 4.16 + // Only walk the head until any clds not purged from prior unloading 4.17 + // (CMS doesn't purge right away). 4.18 + for (ClassLoaderData* cld = _unloading; cld != _saved_unloading; cld = cld->next()) { 4.19 cld->classes_do(f); 4.20 } 4.21 } 4.22 @@ -676,6 +679,11 @@ 4.23 ClassLoaderData* data = _head; 4.24 ClassLoaderData* prev = NULL; 4.25 bool seen_dead_loader = false; 4.26 + 4.27 + // Save previous _unloading pointer for CMS which may add to unloading list before 4.28 + // purging and we don't want to rewalk the previously unloaded class loader data. 4.29 + _saved_unloading = _unloading; 4.30 + 4.31 // mark metadata seen on the stack and code cache so we can delete 4.32 // unneeded entries. 4.33 bool has_redefined_a_class = JvmtiExport::has_redefined_a_class();
5.1 --- a/src/share/vm/classfile/classLoaderData.hpp Wed Jul 02 15:31:10 2014 -0700 5.2 +++ b/src/share/vm/classfile/classLoaderData.hpp Tue Jul 08 13:25:13 2014 -0700 5.3 @@ -66,6 +66,7 @@ 5.4 static ClassLoaderData* _unloading; 5.5 // CMS support. 5.6 static ClassLoaderData* _saved_head; 5.7 + static ClassLoaderData* _saved_unloading; 5.8 static bool _should_purge; 5.9 5.10 static ClassLoaderData* add(Handle class_loader, bool anonymous, TRAPS);
6.1 --- a/src/share/vm/classfile/systemDictionary.cpp Wed Jul 02 15:31:10 2014 -0700 6.2 +++ b/src/share/vm/classfile/systemDictionary.cpp Tue Jul 08 13:25:13 2014 -0700 6.3 @@ -997,7 +997,6 @@ 6.4 6.5 if (host_klass.not_null() && k.not_null()) { 6.6 assert(EnableInvokeDynamic, ""); 6.7 - k->set_host_klass(host_klass()); 6.8 // If it's anonymous, initialize it now, since nobody else will. 6.9 6.10 {