hotspot/src/share/vm/classfile/packageEntry.cpp
changeset 46554 aa1cfd918c4f
parent 46475 75902cea18af
child 46729 c62d2e8b2728
equal deleted inserted replaced
45608:9927a9f16738 46554:aa1cfd918c4f
    99 
    99 
   100   if (m == NULL) {
   100   if (m == NULL) {
   101     // NULL indicates the package is being unqualifiedly exported.  Clean up
   101     // NULL indicates the package is being unqualifiedly exported.  Clean up
   102     // the qualified list at the next safepoint.
   102     // the qualified list at the next safepoint.
   103     set_unqual_exported();
   103     set_unqual_exported();
   104 
       
   105   } else {
   104   } else {
   106     // Add the exported module
   105     // Add the exported module
   107     add_qexport(m);
   106     add_qexport(m);
   108   }
   107   }
   109 }
   108 }
   110 
   109 
   111 // Set the package as exported to all unnamed modules unless the package is
   110 // Set the package as exported to all unnamed modules unless the package is
   112 // already unqualifiedly exported.
   111 // already unqualifiedly exported.
   113 void PackageEntry::set_is_exported_allUnnamed() {
   112 void PackageEntry::set_is_exported_allUnnamed() {
       
   113   if (module()->is_open()) {
       
   114     // No-op for open modules since all packages are unqualifiedly exported
       
   115     return;
       
   116   }
       
   117 
   114   MutexLocker m1(Module_lock);
   118   MutexLocker m1(Module_lock);
   115   if (!is_unqual_exported()) {
   119   if (!is_unqual_exported()) {
   116    _export_flags = PKG_EXP_ALLUNNAMED;
   120    _export_flags = PKG_EXP_ALLUNNAMED;
   117   }
   121   }
   118 }
   122 }
   168   : Hashtable<Symbol*, mtModule>(table_size, sizeof(PackageEntry))
   172   : Hashtable<Symbol*, mtModule>(table_size, sizeof(PackageEntry))
   169 {
   173 {
   170 }
   174 }
   171 
   175 
   172 PackageEntryTable::~PackageEntryTable() {
   176 PackageEntryTable::~PackageEntryTable() {
   173   assert_locked_or_safepoint(Module_lock);
       
   174 
       
   175   // Walk through all buckets and all entries in each bucket,
   177   // Walk through all buckets and all entries in each bucket,
   176   // freeing each entry.
   178   // freeing each entry.
   177   for (int i = 0; i < table_size(); ++i) {
   179   for (int i = 0; i < table_size(); ++i) {
   178     for (PackageEntry* p = bucket(i); p != NULL;) {
   180     for (PackageEntry* p = bucket(i); p != NULL;) {
   179       PackageEntry* to_remove = p;
   181       PackageEntry* to_remove = p;
   206   TRACE_INIT_ID(entry);
   208   TRACE_INIT_ID(entry);
   207 
   209 
   208   // Initialize fields specific to a PackageEntry
   210   // Initialize fields specific to a PackageEntry
   209   entry->init();
   211   entry->init();
   210   entry->name()->increment_refcount();
   212   entry->name()->increment_refcount();
   211   if (!module->is_named()) {
       
   212     // Set the exported state to true because all packages
       
   213     // within the unnamed module are unqualifiedly exported
       
   214     entry->set_unqual_exported();
       
   215   }
       
   216   entry->set_module(module);
   213   entry->set_module(module);
   217   return entry;
   214   return entry;
   218 }
   215 }
   219 
   216 
   220 void PackageEntryTable::add_entry(int index, PackageEntry* new_entry) {
   217 void PackageEntryTable::add_entry(int index, PackageEntry* new_entry) {
   270 }
   267 }
   271 
   268 
   272 // Called when a define module for java.base is being processed.
   269 // Called when a define module for java.base is being processed.
   273 // Verify the packages loaded thus far are in java.base's package list.
   270 // Verify the packages loaded thus far are in java.base's package list.
   274 void PackageEntryTable::verify_javabase_packages(GrowableArray<Symbol*> *pkg_list) {
   271 void PackageEntryTable::verify_javabase_packages(GrowableArray<Symbol*> *pkg_list) {
       
   272   assert_lock_strong(Module_lock);
   275   for (int i = 0; i < table_size(); i++) {
   273   for (int i = 0; i < table_size(); i++) {
   276     for (PackageEntry* entry = bucket(i);
   274     for (PackageEntry* entry = bucket(i);
   277                        entry != NULL;
   275                        entry != NULL;
   278                        entry = entry->next()) {
   276                        entry = entry->next()) {
   279       ModuleEntry* m = entry->module();
   277       ModuleEntry* m = entry->module();
   350                _classpath_index, _export_flags == PKG_EXP_UNQUALIFIED,
   348                _classpath_index, _export_flags == PKG_EXP_UNQUALIFIED,
   351                _export_flags == PKG_EXP_ALLUNNAMED, p2i(next()));
   349                _export_flags == PKG_EXP_ALLUNNAMED, p2i(next()));
   352 }
   350 }
   353 
   351 
   354 void PackageEntryTable::verify() {
   352 void PackageEntryTable::verify() {
   355   int element_count = 0;
   353   verify_table<PackageEntry>("Package Entry Table");
   356   for (int index = 0; index < table_size(); index++) {
       
   357     for (PackageEntry* probe = bucket(index);
       
   358                               probe != NULL;
       
   359                               probe = probe->next()) {
       
   360       probe->verify();
       
   361       element_count++;
       
   362     }
       
   363   }
       
   364   guarantee(number_of_entries() == element_count,
       
   365             "Verify of Package Entry Table failed");
       
   366   DEBUG_ONLY(verify_lookup_length((double)number_of_entries() / table_size(), "Package Entry Table"));
       
   367 }
   354 }
   368 
   355 
   369 void PackageEntry::verify() {
   356 void PackageEntry::verify() {
   370   guarantee(name() != NULL, "A package entry must have a corresponding symbol name.");
   357   guarantee(name() != NULL, "A package entry must have a corresponding symbol name.");
   371 }
   358 }