Mercurial > hg > truffle
diff src/share/vm/gc_implementation/concurrentMarkSweep/cmsOopClosures.inline.hpp @ 935:05f89f00a864
6798898: CMS: bugs related to class unloading
Summary: Override should_remember_klasses() and remember_klass() as needed.
Reviewed-by: ysr, jcoomes
author | jmasa |
---|---|
date | Mon, 24 Aug 2009 10:36:31 -0700 |
parents | a61af66fc99e |
children | 8b46c4d82093 |
line wrap: on
line diff
--- a/src/share/vm/gc_implementation/concurrentMarkSweep/cmsOopClosures.inline.hpp Fri Aug 14 13:44:15 2009 -0700 +++ b/src/share/vm/gc_implementation/concurrentMarkSweep/cmsOopClosures.inline.hpp Mon Aug 24 10:36:31 2009 -0700 @@ -37,16 +37,25 @@ } } -inline void PushOrMarkClosure::remember_klass(Klass* k) { - if (!_revisitStack->push(oop(k))) { +#ifndef PRODUCT +void KlassRememberingOopClosure::check_remember_klasses() const { + assert(_should_remember_klasses == must_remember_klasses(), + "Should remember klasses in this context."); +} +#endif + +void KlassRememberingOopClosure::remember_klass(Klass* k) { + if (!_revisit_stack->push(oop(k))) { fatal("Revisit stack overflow in PushOrMarkClosure"); } + check_remember_klasses(); } -inline void Par_PushOrMarkClosure::remember_klass(Klass* k) { +void Par_KlassRememberingOopClosure::remember_klass(Klass* k) { if (!_revisit_stack->par_push(oop(k))) { fatal("Revisit stack overflow in PushOrMarkClosure"); } + check_remember_klasses(); } inline void PushOrMarkClosure::do_yield_check() {