204 } 205 #endif // PRODUCT 206 207 SATBMarkQueueSet::SATBMarkQueueSet() : 208 PtrQueueSet(), 209 _shared_satb_queue(this, true /* permanent */) { } 210 211 void SATBMarkQueueSet::initialize(Monitor* cbl_mon, Mutex* fl_lock, 212 int process_completed_threshold, 213 Mutex* lock) { 214 PtrQueueSet::initialize(cbl_mon, fl_lock, process_completed_threshold, -1); 215 _shared_satb_queue.set_lock(lock); 216 } 217 218 void SATBMarkQueueSet::handle_zero_index_for_thread(JavaThread* t) { 219 t->satb_mark_queue().handle_zero_index(); 220 } 221 222 #ifdef ASSERT 223 void SATBMarkQueueSet::dump_active_states(bool expected_active) { 224 log_info(gc, verify)("Expected SATB active state: %s", expected_active ? "ACTIVE" : "INACTIVE"); 225 log_info(gc, verify)("Actual SATB active states:"); 226 log_info(gc, verify)(" Queue set: %s", is_active() ? "ACTIVE" : "INACTIVE"); 227 for (JavaThread* t = Threads::first(); t; t = t->next()) { 228 log_info(gc, verify)(" Thread \"%s\" queue: %s", t->name(), t->satb_mark_queue().is_active() ? "ACTIVE" : "INACTIVE"); 229 } 230 log_info(gc, verify)(" Shared queue: %s", shared_satb_queue()->is_active() ? "ACTIVE" : "INACTIVE"); 231 } 232 233 void SATBMarkQueueSet::verify_active_states(bool expected_active) { 234 // Verify queue set state 235 if (is_active() != expected_active) { 236 dump_active_states(expected_active); 237 guarantee(false, "SATB queue set has an unexpected active state"); 238 } 239 240 // Verify thread queue states 241 for (JavaThread* t = Threads::first(); t; t = t->next()) { 242 if (t->satb_mark_queue().is_active() != expected_active) { 243 dump_active_states(expected_active); 244 guarantee(false, "Thread SATB queue has an unexpected active state"); 245 } 246 } 247 248 // Verify shared queue state 249 if (shared_satb_queue()->is_active() != expected_active) { 250 dump_active_states(expected_active); | 204 } 205 #endif // PRODUCT 206 207 SATBMarkQueueSet::SATBMarkQueueSet() : 208 PtrQueueSet(), 209 _shared_satb_queue(this, true /* permanent */) { } 210 211 void SATBMarkQueueSet::initialize(Monitor* cbl_mon, Mutex* fl_lock, 212 int process_completed_threshold, 213 Mutex* lock) { 214 PtrQueueSet::initialize(cbl_mon, fl_lock, process_completed_threshold, -1); 215 _shared_satb_queue.set_lock(lock); 216 } 217 218 void SATBMarkQueueSet::handle_zero_index_for_thread(JavaThread* t) { 219 t->satb_mark_queue().handle_zero_index(); 220 } 221 222 #ifdef ASSERT 223 void SATBMarkQueueSet::dump_active_states(bool expected_active) { 224 log_error(gc, verify)("Expected SATB active state: %s", expected_active ? "ACTIVE" : "INACTIVE"); 225 log_error(gc, verify)("Actual SATB active states:"); 226 log_error(gc, verify)(" Queue set: %s", is_active() ? "ACTIVE" : "INACTIVE"); 227 for (JavaThread* t = Threads::first(); t; t = t->next()) { 228 log_error(gc, verify)(" Thread \"%s\" queue: %s", t->name(), t->satb_mark_queue().is_active() ? "ACTIVE" : "INACTIVE"); 229 } 230 log_error(gc, verify)(" Shared queue: %s", shared_satb_queue()->is_active() ? "ACTIVE" : "INACTIVE"); 231 } 232 233 void SATBMarkQueueSet::verify_active_states(bool expected_active) { 234 // Verify queue set state 235 if (is_active() != expected_active) { 236 dump_active_states(expected_active); 237 guarantee(false, "SATB queue set has an unexpected active state"); 238 } 239 240 // Verify thread queue states 241 for (JavaThread* t = Threads::first(); t; t = t->next()) { 242 if (t->satb_mark_queue().is_active() != expected_active) { 243 dump_active_states(expected_active); 244 guarantee(false, "Thread SATB queue has an unexpected active state"); 245 } 246 } 247 248 // Verify shared queue state 249 if (shared_satb_queue()->is_active() != expected_active) { 250 dump_active_states(expected_active); |