Index: third_party/WebKit/Source/platform/heap/ThreadState.h |
diff --git a/third_party/WebKit/Source/platform/heap/ThreadState.h b/third_party/WebKit/Source/platform/heap/ThreadState.h |
index 34b1ad25ece4b84fe5197863e3415a89616ff738..11218d6f99979960f9eb40f688723878bdf343eb 100644 |
--- a/third_party/WebKit/Source/platform/heap/ThreadState.h |
+++ b/third_party/WebKit/Source/platform/heap/ThreadState.h |
@@ -158,6 +158,25 @@ class PLATFORM_EXPORT ThreadState { |
ThreadState* state_; |
}; |
+ // Used to denote when access to unmarked objects is allowed but we shouldn't |
+ // ressurect it by making new references (e.g. during weak processing and pre |
+ // finalizer). |
+ class ObjectResurrectionForbiddenScope final { |
+ STACK_ALLOCATED(); |
+ |
+ public: |
+ explicit ObjectResurrectionForbiddenScope(ThreadState* state) |
+ : state_(state) { |
+ state_->EnterObjectResurrectionForbiddenScope(); |
+ } |
+ ~ObjectResurrectionForbiddenScope() { |
+ state_->LeaveObjectResurrectionForbiddenScope(); |
+ } |
+ |
+ private: |
+ ThreadState* state_; |
+ }; |
+ |
static void AttachMainThread(); |
// Associate ThreadState object with the current thread. After this |
@@ -261,6 +280,17 @@ class PLATFORM_EXPORT ThreadState { |
mixins_being_constructed_count_--; |
} |
bool SweepForbidden() const { return sweep_forbidden_; } |
+ bool IsObjectResurrectionForbidden() const { |
+ return object_resurrection_forbidden_; |
+ } |
+ void EnterObjectResurrectionForbiddenScope() { |
+ DCHECK(!object_resurrection_forbidden_); |
+ object_resurrection_forbidden_ = true; |
+ } |
+ void LeaveObjectResurrectionForbiddenScope() { |
+ DCHECK(object_resurrection_forbidden_); |
+ object_resurrection_forbidden_ = false; |
+ } |
class MainThreadGCForbiddenScope final { |
STACK_ALLOCATED(); |
@@ -625,6 +655,7 @@ class PLATFORM_EXPORT ThreadState { |
size_t gc_forbidden_count_; |
size_t mixins_being_constructed_count_; |
double accumulated_sweeping_time_; |
+ bool object_resurrection_forbidden_; |
BaseArena* arenas_[BlinkGC::kNumberOfArenas]; |
int vector_backing_arena_index_; |