| Index: src/global-handles.cc
 | 
| diff --git a/src/global-handles.cc b/src/global-handles.cc
 | 
| index 9ede90852831707059f5a3d174727236a0fb4b81..a9caf59476326d0bae25c461f326203db96b400b 100644
 | 
| --- a/src/global-handles.cc
 | 
| +++ b/src/global-handles.cc
 | 
| @@ -372,13 +372,14 @@ void GlobalHandles::IdentifyWeakHandles(WeakSlotCallback f) {
 | 
|  
 | 
|  int post_gc_processing_count = 0;
 | 
|  
 | 
| -void GlobalHandles::PostGarbageCollectionProcessing() {
 | 
| +bool GlobalHandles::PostGarbageCollectionProcessing() {
 | 
|    // Process weak global handle callbacks. This must be done after the
 | 
|    // GC is completely done, because the callbacks may invoke arbitrary
 | 
|    // API functions.
 | 
|    // At the same time deallocate all DESTROYED nodes.
 | 
|    ASSERT(Heap::gc_state() == Heap::NOT_IN_GC);
 | 
|    const int initial_post_gc_processing_count = ++post_gc_processing_count;
 | 
| +  bool next_gc_could_collect_more = false;
 | 
|    Node** p = &head_;
 | 
|    while (*p != NULL) {
 | 
|      if ((*p)->PostGarbageCollectionProcessing()) {
 | 
| @@ -399,6 +400,7 @@ void GlobalHandles::PostGarbageCollectionProcessing() {
 | 
|        }
 | 
|        node->set_next_free(first_deallocated());
 | 
|        set_first_deallocated(node);
 | 
| +      next_gc_could_collect_more = true;
 | 
|      } else {
 | 
|        p = (*p)->next_addr();
 | 
|      }
 | 
| @@ -407,6 +409,8 @@ void GlobalHandles::PostGarbageCollectionProcessing() {
 | 
|    if (first_deallocated()) {
 | 
|      first_deallocated()->set_next(head());
 | 
|    }
 | 
| +
 | 
| +  return next_gc_could_collect_more;
 | 
|  }
 | 
|  
 | 
|  
 | 
| 
 |