< prev index next >

src/hotspot/share/classfile/stringTable.cpp

Print this page
rev 50787 : 8205583: Crash in ConcurrentHashTable do_bulk_delete_locked_for
Reviewed-by:
rev 50788 : [mq]: 8205583_gerard


 482   bool operator()(WeakHandle<vm_string_table_data>* val) {
 483     ++_item;
 484     oop tmp = val->peek();
 485     if (tmp == NULL) {
 486       ++_count;
 487       return true;
 488     } else {
 489       return false;
 490     }
 491   }
 492 };
 493 
 494 void StringTable::clean_dead_entries(JavaThread* jt) {
 495   StringTableHash::BulkDeleteTask bdt(_local_table);
 496   if (!bdt.prepare(jt)) {
 497     return;
 498   }
 499 
 500   StringTableDeleteCheck stdc;
 501   StringTableDoDelete stdd;
 502   bool interrupted = false;
 503   {
 504     TraceTime timer("Clean", TRACETIME_LOG(Debug, stringtable, perf));
 505     while(bdt.do_task(jt, stdc, stdd)) {
 506       bdt.pause(jt);
 507       {
 508         ThreadBlockInVM tbivm(jt);
 509       }
 510       bdt.cont(jt);
 511     }
 512     bdt.done(jt);
 513   }
 514   log_debug(stringtable)("Cleaned %ld of %ld", stdc._count, stdc._item);
 515 }
 516 
 517 void StringTable::check_concurrent_work() {
 518   if (_has_work) {
 519     return;
 520   }
 521 
 522   double load_factor = StringTable::get_load_factor();




 482   bool operator()(WeakHandle<vm_string_table_data>* val) {
 483     ++_item;
 484     oop tmp = val->peek();
 485     if (tmp == NULL) {
 486       ++_count;
 487       return true;
 488     } else {
 489       return false;
 490     }
 491   }
 492 };
 493 
 494 void StringTable::clean_dead_entries(JavaThread* jt) {
 495   StringTableHash::BulkDeleteTask bdt(_local_table);
 496   if (!bdt.prepare(jt)) {
 497     return;
 498   }
 499 
 500   StringTableDeleteCheck stdc;
 501   StringTableDoDelete stdd;

 502   {
 503     TraceTime timer("Clean", TRACETIME_LOG(Debug, stringtable, perf));
 504     while(bdt.do_task(jt, stdc, stdd)) {
 505       bdt.pause(jt);
 506       {
 507         ThreadBlockInVM tbivm(jt);
 508       }
 509       bdt.cont(jt);
 510     }
 511     bdt.done(jt);
 512   }
 513   log_debug(stringtable)("Cleaned %ld of %ld", stdc._count, stdc._item);
 514 }
 515 
 516 void StringTable::check_concurrent_work() {
 517   if (_has_work) {
 518     return;
 519   }
 520 
 521   double load_factor = StringTable::get_load_factor();


< prev index next >