< prev index next >

src/hotspot/share/classfile/symbolTable.cpp

Print this page

        

@@ -132,11 +132,11 @@
   _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
+    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,11 +195,11 @@
     // 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
+    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 >