bool mark_address(immix::Address addr, immix::MarkStack& ms) { Object* obj = addr.as<Object>(); if(obj->marked_p()) { if(obj->marked_p(gc_->which_mark())) return false; assert(0 && "invalid mark detectet!\n"); } obj->mark(gc_->which_mark()); ms.push_back(addr); // If this is a young object, let the GC know not to try and mark // the block it's in. if(obj->young_object_p() || !obj->in_immix_p()) { return false; } return true; }
bool mark_address(immix::Address addr, immix::MarkStack& ms) { Object* obj = addr.as<Object>(); if(obj->marked_p()) return false; obj->mark(gc_->which_mark()); gc_->inc_marked_objects(); ms.push_back(addr); if(obj->in_immix_p()) return true; // If this is a young object, let the GC know not to try and mark // the block it's in. return false; }