| 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
|
|
|