equal
deleted
inserted
replaced
130 }; |
130 }; |
131 |
131 |
132 bool ReferenceToRootClosure::do_cldg_roots() { |
132 bool ReferenceToRootClosure::do_cldg_roots() { |
133 assert(!complete(), "invariant"); |
133 assert(!complete(), "invariant"); |
134 ReferenceLocateClosure rlc(_callback, OldObjectRoot::_class_loader_data, OldObjectRoot::_type_undetermined, NULL); |
134 ReferenceLocateClosure rlc(_callback, OldObjectRoot::_class_loader_data, OldObjectRoot::_type_undetermined, NULL); |
135 CLDToOopClosure cldt_closure(&rlc, ClassLoaderData::_claim_strong); |
135 CLDToOopClosure cldt_closure(&rlc, ClassLoaderData::_claim_none); |
136 ClassLoaderDataGraph::always_strong_cld_do(&cldt_closure); |
136 ClassLoaderDataGraph::always_strong_cld_do(&cldt_closure); |
137 return rlc.complete(); |
137 return rlc.complete(); |
138 } |
138 } |
139 |
139 |
140 bool ReferenceToRootClosure::do_object_synchronizer_roots() { |
140 bool ReferenceToRootClosure::do_object_synchronizer_roots() { |
433 |
433 |
434 class RootResolverMarkScope : public MarkScope { |
434 class RootResolverMarkScope : public MarkScope { |
435 }; |
435 }; |
436 |
436 |
437 void RootResolver::resolve(RootCallback& callback) { |
437 void RootResolver::resolve(RootCallback& callback) { |
438 |
|
439 // Need to clear cld claim bit before starting |
|
440 ClassLoaderDataGraph::clear_claimed_marks(); |
|
441 RootResolverMarkScope mark_scope; |
438 RootResolverMarkScope mark_scope; |
442 |
439 |
443 // thread local roots |
440 // thread local roots |
444 ReferenceToThreadRootClosure rtrc(callback); |
441 ReferenceToThreadRootClosure rtrc(callback); |
445 if (rtrc.complete()) { |
442 if (rtrc.complete()) { |