Index: Source/platform/heap/Visitor.h |
diff --git a/Source/platform/heap/Visitor.h b/Source/platform/heap/Visitor.h |
index ffadc80fe99aa42561c757d29f9432d498d39a52..e1c93500db7e20d70b8994e3b820d3e85ced0145 100644 |
--- a/Source/platform/heap/Visitor.h |
+++ b/Source/platform/heap/Visitor.h |
@@ -594,8 +594,18 @@ class DefaultTraceTrait<T, true> { |
public: |
static void mark(Visitor* visitor, const T* self) |
{ |
- if (self) |
- self->adjustAndMark(visitor); |
+ if (!self) |
+ return; |
+ |
+ // Before doing adjustAndMark we need to check if the page is orphaned |
+ // since we cannot call adjustAndMark if so, as there will be no vtable. |
+ // If orphaned just mark the page as traced. |
+ BaseHeapPage* heapPage = pageHeaderFromObject(self); |
+ if (heapPage->orphaned()) { |
+ heapPage->setTracedAfterOrphaned(); |
+ return; |
+ } |
+ self->adjustAndMark(visitor); |
} |
#ifndef NDEBUG |