< prev index next >

src/hotspot/share/gc/shared/satbMarkQueue.cpp

Print this page




 312   class PrintThreadClosure : public ThreadClosure {
 313     SATBMarkQueueSet* _qset;
 314     char* _buffer;
 315 
 316   public:
 317     PrintThreadClosure(SATBMarkQueueSet* qset, char* buffer) :
 318       _qset(qset), _buffer(buffer) {}
 319 
 320     virtual void do_thread(Thread* t) {
 321       os::snprintf(_buffer, SATB_PRINTER_BUFFER_SIZE, "Thread: %s", t->name());
 322       _qset->satb_queue_for_thread(t).print(_buffer);
 323     }
 324   } closure(this, buffer);
 325   Threads::threads_do(&closure);
 326 
 327   tty->cr();
 328 }
 329 #endif // PRODUCT
 330 
 331 void SATBMarkQueueSet::abandon_completed_buffers() {
 332   Atomic::store(size_t(0), &_count_and_process_flag);
 333   BufferNode* buffers_to_delete = _list.pop_all();
 334   while (buffers_to_delete != NULL) {
 335     BufferNode* bn = buffers_to_delete;
 336     buffers_to_delete = bn->next();
 337     bn->set_next(NULL);
 338     deallocate_buffer(bn);
 339   }
 340 }
 341 
 342 void SATBMarkQueueSet::abandon_partial_marking() {
 343   assert(SafepointSynchronize::is_at_safepoint(), "Must be at safepoint.");
 344   abandon_completed_buffers();
 345 
 346   class AbandonThreadQueueClosure : public ThreadClosure {
 347     SATBMarkQueueSet* _qset;
 348   public:
 349     AbandonThreadQueueClosure(SATBMarkQueueSet* qset) : _qset(qset) {}
 350     virtual void do_thread(Thread* t) {
 351       _qset->satb_queue_for_thread(t).reset();
 352     }


 312   class PrintThreadClosure : public ThreadClosure {
 313     SATBMarkQueueSet* _qset;
 314     char* _buffer;
 315 
 316   public:
 317     PrintThreadClosure(SATBMarkQueueSet* qset, char* buffer) :
 318       _qset(qset), _buffer(buffer) {}
 319 
 320     virtual void do_thread(Thread* t) {
 321       os::snprintf(_buffer, SATB_PRINTER_BUFFER_SIZE, "Thread: %s", t->name());
 322       _qset->satb_queue_for_thread(t).print(_buffer);
 323     }
 324   } closure(this, buffer);
 325   Threads::threads_do(&closure);
 326 
 327   tty->cr();
 328 }
 329 #endif // PRODUCT
 330 
 331 void SATBMarkQueueSet::abandon_completed_buffers() {
 332   Atomic::store(&_count_and_process_flag, size_t(0));
 333   BufferNode* buffers_to_delete = _list.pop_all();
 334   while (buffers_to_delete != NULL) {
 335     BufferNode* bn = buffers_to_delete;
 336     buffers_to_delete = bn->next();
 337     bn->set_next(NULL);
 338     deallocate_buffer(bn);
 339   }
 340 }
 341 
 342 void SATBMarkQueueSet::abandon_partial_marking() {
 343   assert(SafepointSynchronize::is_at_safepoint(), "Must be at safepoint.");
 344   abandon_completed_buffers();
 345 
 346   class AbandonThreadQueueClosure : public ThreadClosure {
 347     SATBMarkQueueSet* _qset;
 348   public:
 349     AbandonThreadQueueClosure(SATBMarkQueueSet* qset) : _qset(qset) {}
 350     virtual void do_thread(Thread* t) {
 351       _qset->satb_queue_for_thread(t).reset();
 352     }
< prev index next >