Index: src/global-handles.cc |
diff --git a/src/global-handles.cc b/src/global-handles.cc |
index f089b85e1ab75f018f2cba05662e606222c6bef1..a909caf3de2449421252948ced2f11874abbd52e 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 weak_callback_invoked = false; |
Node** p = &head_; |
while (*p != NULL) { |
if ((*p)->PostGarbageCollectionProcessing()) { |
@@ -389,6 +390,7 @@ void GlobalHandles::PostGarbageCollectionProcessing() { |
// restart the processing). |
break; |
} |
+ weak_callback_invoked = true; |
} |
if ((*p)->state_ == Node::DESTROYED) { |
// Delete the link. |
@@ -407,6 +409,7 @@ void GlobalHandles::PostGarbageCollectionProcessing() { |
if (first_deallocated()) { |
first_deallocated()->set_next(head()); |
} |
+ return weak_callback_invoked; |
} |