src/share/vm/gc_implementation/g1/dirtyCardQueue.cpp

changeset 1525
fa357420e7d2
parent 1320
7f807f55161a
child 1546
44f61c24ddab
     1.1 --- a/src/share/vm/gc_implementation/g1/dirtyCardQueue.cpp	Fri Nov 20 14:47:01 2009 -0500
     1.2 +++ b/src/share/vm/gc_implementation/g1/dirtyCardQueue.cpp	Tue Nov 24 15:19:30 2009 -0800
     1.3 @@ -155,7 +155,7 @@
     1.4  }
     1.5  
     1.6  DirtyCardQueueSet::CompletedBufferNode*
     1.7 -DirtyCardQueueSet::get_completed_buffer_lock(int stop_at) {
     1.8 +DirtyCardQueueSet::get_completed_buffer(int stop_at) {
     1.9    CompletedBufferNode* nd = NULL;
    1.10    MutexLockerEx x(_cbl_mon, Mutex::_no_safepoint_check_flag);
    1.11  
    1.12 @@ -175,28 +175,6 @@
    1.13    return nd;
    1.14  }
    1.15  
    1.16 -// We only do this in contexts where there is no concurrent enqueueing.
    1.17 -DirtyCardQueueSet::CompletedBufferNode*
    1.18 -DirtyCardQueueSet::get_completed_buffer_CAS() {
    1.19 -  CompletedBufferNode* nd = _completed_buffers_head;
    1.20 -
    1.21 -  while (nd != NULL) {
    1.22 -    CompletedBufferNode* next = nd->next;
    1.23 -    CompletedBufferNode* result =
    1.24 -      (CompletedBufferNode*)Atomic::cmpxchg_ptr(next,
    1.25 -                                                &_completed_buffers_head,
    1.26 -                                                nd);
    1.27 -    if (result == nd) {
    1.28 -      return result;
    1.29 -    } else {
    1.30 -      nd = _completed_buffers_head;
    1.31 -    }
    1.32 -  }
    1.33 -  assert(_completed_buffers_head == NULL, "Loop post");
    1.34 -  _completed_buffers_tail = NULL;
    1.35 -  return NULL;
    1.36 -}
    1.37 -
    1.38  bool DirtyCardQueueSet::
    1.39  apply_closure_to_completed_buffer_helper(int worker_i,
    1.40                                           CompletedBufferNode* nd) {
    1.41 @@ -222,15 +200,10 @@
    1.42  
    1.43  bool DirtyCardQueueSet::apply_closure_to_completed_buffer(int worker_i,
    1.44                                                            int stop_at,
    1.45 -                                                          bool with_CAS)
    1.46 +                                                          bool during_pause)
    1.47  {
    1.48 -  CompletedBufferNode* nd = NULL;
    1.49 -  if (with_CAS) {
    1.50 -    guarantee(stop_at == 0, "Precondition");
    1.51 -    nd = get_completed_buffer_CAS();
    1.52 -  } else {
    1.53 -    nd = get_completed_buffer_lock(stop_at);
    1.54 -  }
    1.55 +  assert(!during_pause || stop_at == 0, "Should not leave any completed buffers during a pause");
    1.56 +  CompletedBufferNode* nd = get_completed_buffer(stop_at);
    1.57    bool res = apply_closure_to_completed_buffer_helper(worker_i, nd);
    1.58    if (res) Atomic::inc(&_processed_buffers_rs_thread);
    1.59    return res;

mercurial