2333 assert(_restart_addr == NULL, "Expected pre-condition");
2334 verification_mark_bm()->iterate(&markFromRootsClosure);
2335 while (_restart_addr != NULL) {
2336 // Deal with stack overflow: by restarting at the indicated
2337 // address.
2338 HeapWord* ra = _restart_addr;
2339 markFromRootsClosure.reset(ra);
2340 _restart_addr = NULL;
2341 verification_mark_bm()->iterate(&markFromRootsClosure, ra, _span.end());
2342 }
2343 assert(verification_mark_stack()->isEmpty(), "Should have been drained");
2344 verify_work_stacks_empty();
2345
2346 // Marking completed -- now verify that each bit marked in
2347 // verification_mark_bm() is also marked in markBitMap(); flag all
2348 // errors by printing corresponding objects.
2349 VerifyMarkedClosure vcl(markBitMap());
2350 verification_mark_bm()->iterate(&vcl);
2351 if (vcl.failed()) {
2352 LogHandle(gc, verify) log;
2353 log.error("Verification failed");
2354 ResourceMark rm;
2355 gch->print_on(log.error_stream());
2356 fatal("CMS: failed marking verification after remark");
2357 }
2358 }
2359
2360 class VerifyKlassOopsKlassClosure : public KlassClosure {
2361 class VerifyKlassOopsClosure : public OopClosure {
2362 CMSBitMap* _bitmap;
2363 public:
2364 VerifyKlassOopsClosure(CMSBitMap* bitmap) : _bitmap(bitmap) { }
2365 void do_oop(oop* p) { guarantee(*p == NULL || _bitmap->isMarked((HeapWord*) *p), "Should be marked"); }
2366 void do_oop(narrowOop* p) { ShouldNotReachHere(); }
2367 } _oop_closure;
2368 public:
2369 VerifyKlassOopsKlassClosure(CMSBitMap* bitmap) : _oop_closure(bitmap) {}
2370 void do_klass(Klass* k) {
2371 k->oops_do(&_oop_closure);
2372 }
2373 };
|
2333 assert(_restart_addr == NULL, "Expected pre-condition");
2334 verification_mark_bm()->iterate(&markFromRootsClosure);
2335 while (_restart_addr != NULL) {
2336 // Deal with stack overflow: by restarting at the indicated
2337 // address.
2338 HeapWord* ra = _restart_addr;
2339 markFromRootsClosure.reset(ra);
2340 _restart_addr = NULL;
2341 verification_mark_bm()->iterate(&markFromRootsClosure, ra, _span.end());
2342 }
2343 assert(verification_mark_stack()->isEmpty(), "Should have been drained");
2344 verify_work_stacks_empty();
2345
2346 // Marking completed -- now verify that each bit marked in
2347 // verification_mark_bm() is also marked in markBitMap(); flag all
2348 // errors by printing corresponding objects.
2349 VerifyMarkedClosure vcl(markBitMap());
2350 verification_mark_bm()->iterate(&vcl);
2351 if (vcl.failed()) {
2352 LogHandle(gc, verify) log;
2353 log.error("Failed marking verification after remark");
2354 ResourceMark rm;
2355 gch->print_on(log.error_stream());
2356 fatal("CMS: failed marking verification after remark");
2357 }
2358 }
2359
2360 class VerifyKlassOopsKlassClosure : public KlassClosure {
2361 class VerifyKlassOopsClosure : public OopClosure {
2362 CMSBitMap* _bitmap;
2363 public:
2364 VerifyKlassOopsClosure(CMSBitMap* bitmap) : _bitmap(bitmap) { }
2365 void do_oop(oop* p) { guarantee(*p == NULL || _bitmap->isMarked((HeapWord*) *p), "Should be marked"); }
2366 void do_oop(narrowOop* p) { ShouldNotReachHere(); }
2367 } _oop_closure;
2368 public:
2369 VerifyKlassOopsKlassClosure(CMSBitMap* bitmap) : _oop_closure(bitmap) {}
2370 void do_klass(Klass* k) {
2371 k->oops_do(&_oop_closure);
2372 }
2373 };
|