| Index: src/global-handles.cc
|
| diff --git a/src/global-handles.cc b/src/global-handles.cc
|
| index ba19fe1679a2e1e6f8bf21a0e715db4fadf61b19..a5ae2d5626f3701f8c953676ebc2a3e1932736fb 100644
|
| --- a/src/global-handles.cc
|
| +++ b/src/global-handles.cc
|
| @@ -611,21 +611,21 @@ bool GlobalHandles::IterateObjectGroups(ObjectVisitor* v,
|
| }
|
|
|
|
|
| -bool GlobalHandles::PostGarbageCollectionProcessing(
|
| +int GlobalHandles::PostGarbageCollectionProcessing(
|
| GarbageCollector collector, GCTracer* tracer) {
|
| // Process weak global handle callbacks. This must be done after the
|
| // GC is completely done, because the callbacks may invoke arbitrary
|
| // API functions.
|
| ASSERT(isolate_->heap()->gc_state() == Heap::NOT_IN_GC);
|
| const int initial_post_gc_processing_count = ++post_gc_processing_count_;
|
| - bool next_gc_likely_to_collect_more = false;
|
| + int freed_nodes = 0;
|
| if (collector == SCAVENGER) {
|
| for (int i = 0; i < new_space_nodes_.length(); ++i) {
|
| Node* node = new_space_nodes_[i];
|
| ASSERT(node->is_in_new_space_list());
|
| if (!node->IsRetainer()) {
|
| // Free nodes do not have weak callbacks. Do not use them to compute
|
| - // the next_gc_likely_to_collect_more.
|
| + // the freed_nodes.
|
| continue;
|
| }
|
| // Skip dependent handles. Their weak callbacks might expect to be
|
| @@ -641,29 +641,29 @@ bool GlobalHandles::PostGarbageCollectionProcessing(
|
| // PostGarbageCollection processing. The current node might
|
| // have been deleted in that round, so we need to bail out (or
|
| // restart the processing).
|
| - return next_gc_likely_to_collect_more;
|
| + return freed_nodes;
|
| }
|
| }
|
| if (!node->IsRetainer()) {
|
| - next_gc_likely_to_collect_more = true;
|
| + freed_nodes++;
|
| }
|
| }
|
| } else {
|
| for (NodeIterator it(this); !it.done(); it.Advance()) {
|
| if (!it.node()->IsRetainer()) {
|
| // Free nodes do not have weak callbacks. Do not use them to compute
|
| - // the next_gc_likely_to_collect_more.
|
| + // the freed_nodes.
|
| continue;
|
| }
|
| it.node()->clear_partially_dependent();
|
| if (it.node()->PostGarbageCollectionProcessing(isolate_)) {
|
| if (initial_post_gc_processing_count != post_gc_processing_count_) {
|
| // See the comment above.
|
| - return next_gc_likely_to_collect_more;
|
| + return freed_nodes;
|
| }
|
| }
|
| if (!it.node()->IsRetainer()) {
|
| - next_gc_likely_to_collect_more = true;
|
| + freed_nodes++;
|
| }
|
| }
|
| }
|
| @@ -686,7 +686,7 @@ bool GlobalHandles::PostGarbageCollectionProcessing(
|
| }
|
| }
|
| new_space_nodes_.Rewind(last);
|
| - return next_gc_likely_to_collect_more;
|
| + return freed_nodes;
|
| }
|
|
|
|
|
|
|