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