181 PackageEntry* to_remove = p;
182 // read next before freeing.
183 p = p->next();
184
185 // Clean out the C heap allocated qualified exports list first before freeing the entry
186 to_remove->delete_qualified_exports();
187 to_remove->name()->decrement_refcount();
188
189 // Unlink from the Hashtable prior to freeing
190 unlink_entry(to_remove);
191 FREE_C_HEAP_ARRAY(char, to_remove);
192 }
193 }
194 assert(number_of_entries() == 0, "should have removed all entries");
195 assert(new_entry_free_list() == NULL, "entry present on PackageEntryTable's free list");
196 free_buckets();
197 }
198
199 PackageEntry* PackageEntryTable::new_entry(unsigned int hash, Symbol* name, ModuleEntry* module) {
200 assert(Module_lock->owned_by_self(), "should have the Module_lock");
201 PackageEntry* entry = (PackageEntry*) NEW_C_HEAP_ARRAY(char, entry_size(), mtModule);
202
203 // Initialize everything BasicHashtable would
204 entry->set_next(NULL);
205 entry->set_hash(hash);
206 entry->set_literal(name);
207
208 TRACE_INIT_ID(entry);
209
210 // Initialize fields specific to a PackageEntry
211 entry->init();
212 entry->name()->increment_refcount();
213 entry->set_module(module);
214 return entry;
215 }
216
217 void PackageEntryTable::add_entry(int index, PackageEntry* new_entry) {
218 assert(Module_lock->owned_by_self(), "should have the Module_lock");
219 Hashtable<Symbol*, mtModule>::add_entry(index, (HashtableEntry<Symbol*, mtModule>*)new_entry);
220 }
221
222 // Create package in loader's package entry table and return the entry.
223 // If entry already exists, return null. Assume Module lock was taken by caller.
224 PackageEntry* PackageEntryTable::locked_create_entry_or_null(Symbol* name, ModuleEntry* module) {
225 assert(Module_lock->owned_by_self(), "should have the Module_lock");
226 // Check if package already exists. Return NULL if it does.
|
181 PackageEntry* to_remove = p;
182 // read next before freeing.
183 p = p->next();
184
185 // Clean out the C heap allocated qualified exports list first before freeing the entry
186 to_remove->delete_qualified_exports();
187 to_remove->name()->decrement_refcount();
188
189 // Unlink from the Hashtable prior to freeing
190 unlink_entry(to_remove);
191 FREE_C_HEAP_ARRAY(char, to_remove);
192 }
193 }
194 assert(number_of_entries() == 0, "should have removed all entries");
195 assert(new_entry_free_list() == NULL, "entry present on PackageEntryTable's free list");
196 free_buckets();
197 }
198
199 PackageEntry* PackageEntryTable::new_entry(unsigned int hash, Symbol* name, ModuleEntry* module) {
200 assert(Module_lock->owned_by_self(), "should have the Module_lock");
201 PackageEntry* entry = (PackageEntry*)Hashtable<Symbol*, mtModule>::allocate_new_entry(hash, name);
202
203 TRACE_INIT_ID(entry);
204
205 // Initialize fields specific to a PackageEntry
206 entry->init();
207 entry->name()->increment_refcount();
208 entry->set_module(module);
209 return entry;
210 }
211
212 void PackageEntryTable::add_entry(int index, PackageEntry* new_entry) {
213 assert(Module_lock->owned_by_self(), "should have the Module_lock");
214 Hashtable<Symbol*, mtModule>::add_entry(index, (HashtableEntry<Symbol*, mtModule>*)new_entry);
215 }
216
217 // Create package in loader's package entry table and return the entry.
218 // If entry already exists, return null. Assume Module lock was taken by caller.
219 PackageEntry* PackageEntryTable::locked_create_entry_or_null(Symbol* name, ModuleEntry* module) {
220 assert(Module_lock->owned_by_self(), "should have the Module_lock");
221 // Check if package already exists. Return NULL if it does.
|