Index: third_party/WebKit/Source/bindings/core/v8/ScriptWrappableVisitor.h |
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptWrappableVisitor.h b/third_party/WebKit/Source/bindings/core/v8/ScriptWrappableVisitor.h |
index eaaeacdcac09812056add78fec2a9dcc13d47000..0937d1dc20a631fa22f979cbca1fbbbd0e37782a 100644 |
--- a/third_party/WebKit/Source/bindings/core/v8/ScriptWrappableVisitor.h |
+++ b/third_party/WebKit/Source/bindings/core/v8/ScriptWrappableVisitor.h |
@@ -132,9 +132,11 @@ class CORE_EXPORT ScriptWrappableVisitor : public v8::EmbedderHeapTracer, |
// Otherwise, eagerly mark the wrapper header and put the object on the |
// marking deque for further processing. |
WrapperVisitor* const visitor = currentVisitor(threadState->isolate()); |
- TraceTrait<T>::markWrapperNoTracing(visitor, dstObject); |
- visitor->pushToMarkingDeque(TraceTrait<T>::traceMarkedWrapper, |
- TraceTrait<T>::heapObjectHeader, dstObject); |
+ if (visitor->pushToMarkingDeque(TraceTrait<T>::traceMarkedWrapper, |
+ TraceTrait<T>::heapObjectHeader, |
+ dstObject)) { |
+ TraceTrait<T>::markWrapperNoTracing(visitor, dstObject); |
+ } |
return; |
} |
@@ -169,10 +171,13 @@ class CORE_EXPORT ScriptWrappableVisitor : public v8::EmbedderHeapTracer, |
void invalidateDeadObjectsInMarkingDeque(); |
- void pushToMarkingDeque( |
+ bool pushToMarkingDeque( |
void (*traceWrappersCallback)(const WrapperVisitor*, const void*), |
HeapObjectHeader* (*heapObjectHeaderCallback)(const void*), |
const void* object) const override { |
+ if (!m_tracingInProgress) |
+ return false; |
+ |
m_markingDeque.append(WrapperMarkingData(traceWrappersCallback, |
heapObjectHeaderCallback, object)); |
#if DCHECK_IS_ON() |
@@ -181,6 +186,7 @@ class CORE_EXPORT ScriptWrappableVisitor : public v8::EmbedderHeapTracer, |
traceWrappersCallback, heapObjectHeaderCallback, object)); |
} |
#endif |
+ return true; |
} |
bool markWrapperHeader(HeapObjectHeader*) const; |