--- old/src/share/vm/classfile/packageEntry.cpp 2016-12-21 08:13:57.283947713 -0500 +++ new/src/share/vm/classfile/packageEntry.cpp 2016-12-21 08:13:56.229596439 -0500 @@ -98,17 +98,9 @@ } if (m == NULL) { - // NULL indicates the package is being unqualifiedly exported - if (has_qual_exports_list()) { - // Legit to transition a package from being qualifiedly exported - // to unqualified. Clean up the qualified lists at the next - // safepoint. - _exported_pending_delete = _qualified_exports; - } - - // Mark package as unqualifiedly exported + // NULL indicates the package is being unqualifiedly exported. Clean up + // the qualified list at the next safepoint. set_unqual_exported(); - } else { // Add the exported module add_qexport(m); @@ -160,18 +152,9 @@ void PackageEntry::delete_qualified_exports() { assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint"); - if (_exported_pending_delete != NULL) { - // If a transition occurred from qualified to unqualified, the _qualified_exports - // field should have been NULL'ed out. - assert(_qualified_exports == NULL, "Package's exported pending delete, exported list should not be active"); - delete _exported_pending_delete; - } - if (_qualified_exports != NULL) { delete _qualified_exports; } - - _exported_pending_delete = NULL; _qualified_exports = NULL; } @@ -181,7 +164,7 @@ } PackageEntryTable::~PackageEntryTable() { - assert_locked_or_safepoint(Module_lock); + assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint"); // Walk through all buckets and all entries in each bucket, // freeing each entry. @@ -302,12 +285,9 @@ // iteration of qualified exports void PackageEntry::package_exports_do(ModuleClosure* const f) { - assert_locked_or_safepoint(Module_lock); assert(f != NULL, "invariant"); - if (has_qual_exports_list()) { int qe_len = _qualified_exports->length(); - for (int i = 0; i < qe_len; ++i) { f->do_module(_qualified_exports->at(i)); }