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 }
|