< prev index next >

src/share/vm/gc/cms/concurrentMarkSweepGeneration.cpp

Print this page
rev 11971 : [mq]: overflow_list_3

@@ -7827,22 +7827,22 @@
 // Single-threaded
 bool CMSCollector::take_from_overflow_list(size_t num, CMSMarkStack* stack) {
   assert(stack->isEmpty(), "Expected precondition");
   assert(stack->capacity() > num, "Shouldn't bite more than can chew");
   size_t i = num;
-  oop  cur = _overflow_list;
+  oop  cur = oop(_overflow_list);
   const markOop proto = markOopDesc::prototype();
   NOT_PRODUCT(ssize_t n = 0;)
   for (oop next; i > 0 && cur != NULL; cur = next, i--) {
     next = oop(cur->mark());
     cur->set_mark(proto);   // until proven otherwise
     assert(cur->is_oop(), "Should be an oop");
     bool res = stack->push(cur);
     assert(res, "Bit off more than can chew?");
     NOT_PRODUCT(n++;)
   }
-  _overflow_list = cur;
+  _overflow_list = (oopDesc*)cur;
 #ifndef PRODUCT
   assert(_num_par_pushes >= n, "Too many pops?");
   _num_par_pushes -=n;
 #endif
   return !stack->isEmpty();

@@ -7933,11 +7933,11 @@
     cur->set_mark(NULL);           // break off suffix
     // It's possible that the list is still in the empty(busy) state
     // we left it in a short while ago; in that case we may be
     // able to place back the suffix without incurring the cost
     // of a walk down the list.
-    oop observed_overflow_list = _overflow_list;
+    oop observed_overflow_list = oop(_overflow_list);
     oop cur_overflow_list = observed_overflow_list;
     bool attached = false;
     while (observed_overflow_list == BUSY || observed_overflow_list == NULL) {
       observed_overflow_list =
         (oop) Atomic::cmpxchg_ptr(suffix_head, &_overflow_list, cur_overflow_list);

@@ -7952,11 +7952,11 @@
       // list.
       for (cur = suffix_head; cur->mark() != NULL; cur = (oop)(cur->mark()));
       oop suffix_tail = cur;
       assert(suffix_tail != NULL && suffix_tail->mark() == NULL,
              "Tautology");
-      observed_overflow_list = _overflow_list;
+      observed_overflow_list = oop(_overflow_list);
       do {
         cur_overflow_list = observed_overflow_list;
         if (cur_overflow_list != BUSY) {
           // Do the splice ...
           suffix_tail->set_mark(markOop(cur_overflow_list));

@@ -7995,19 +7995,19 @@
 void CMSCollector::push_on_overflow_list(oop p) {
   NOT_PRODUCT(_num_par_pushes++;)
   assert(p->is_oop(), "Not an oop");
   preserve_mark_if_necessary(p);
   p->set_mark((markOop)_overflow_list);
-  _overflow_list = p;
+  _overflow_list = (oopDesc*)p;
 }
 
 // Multi-threaded; use CAS to prepend to overflow list
 void CMSCollector::par_push_on_overflow_list(oop p) {
   NOT_PRODUCT(Atomic::inc_ptr(&_num_par_pushes);)
   assert(p->is_oop(), "Not an oop");
   par_preserve_mark_if_necessary(p);
-  oop observed_overflow_list = _overflow_list;
+  oop observed_overflow_list = oop(_overflow_list);
   oop cur_overflow_list;
   do {
     cur_overflow_list = observed_overflow_list;
     if (cur_overflow_list != BUSY) {
       p->set_mark(markOop(cur_overflow_list));
< prev index next >