< prev index next >

src/hotspot/share/classfile/symbolTable.cpp

Print this page

        

*** 132,142 **** _local_table = new SymbolTableHash(start_size_log_2, END_SIZE, REHASH_LEN); } void SymbolTable::delete_symbol(Symbol* sym) { if (sym->refcount() == PERM_REFCOUNT) { ! MutexLocker ml(SymbolTable_lock); // Protect arena // Deleting permanent symbol should not occur very often (insert race condition), // so log it. log_trace_symboltable_helper(sym, "Freeing permanent symbol"); if (!arena()->Afree(sym, sym->size())) { log_trace_symboltable_helper(sym, "Leaked permanent symbol"); --- 132,142 ---- _local_table = new SymbolTableHash(start_size_log_2, END_SIZE, REHASH_LEN); } void SymbolTable::delete_symbol(Symbol* sym) { if (sym->refcount() == PERM_REFCOUNT) { ! MutexLockerEx ml(SymbolArena_lock, Mutex::_no_safepoint_check_flag); // Protect arena // Deleting permanent symbol should not occur very often (insert race condition), // so log it. log_trace_symboltable_helper(sym, "Freeing permanent symbol"); if (!arena()->Afree(sym, sym->size())) { log_trace_symboltable_helper(sym, "Leaked permanent symbol");
*** 195,205 **** // refcount starts as 1 sym = new (len, THREAD) Symbol((const u1*)name, len, 1); assert(sym != NULL, "new should call vm_exit_out_of_memory if C_HEAP is exhausted"); } else { // Allocate to global arena ! MutexLocker ml(SymbolTable_lock); // Protect arena sym = new (len, arena(), THREAD) Symbol((const u1*)name, len, PERM_REFCOUNT); } return sym; } --- 195,205 ---- // refcount starts as 1 sym = new (len, THREAD) Symbol((const u1*)name, len, 1); assert(sym != NULL, "new should call vm_exit_out_of_memory if C_HEAP is exhausted"); } else { // Allocate to global arena ! MutexLockerEx ml(SymbolArena_lock, Mutex::_no_safepoint_check_flag); // Protect arena sym = new (len, arena(), THREAD) Symbol((const u1*)name, len, PERM_REFCOUNT); } return sym; }
< prev index next >