diff --git a/js/src/gc/Barrier.h b/js/src/gc/Barrier.h index be1f98b75ff..16dc08d2029 100644 --- a/js/src/gc/Barrier.h +++ b/js/src/gc/Barrier.h @@ -345,7 +345,6 @@ class BarrieredBase : public BarrieredBaseMixins T value; explicit BarrieredBase(T v) : value(v) {} - ~BarrieredBase() { pre(); } public: void init(T v) { @@ -400,6 +399,7 @@ class PreBarriered : public BarrieredBase MOZ_IMPLICIT PreBarriered(T v) : BarrieredBase(v) {} explicit PreBarriered(const PreBarriered& v) : BarrieredBase(v.value) {} + ~PreBarriered() { this->pre(); } /* Use to set the pointer to nullptr. */ void clear() { @@ -439,6 +439,7 @@ class HeapPtr : public BarrieredBase explicit HeapPtr(const HeapPtr& v) : BarrieredBase(v) { post(); } #ifdef DEBUG ~HeapPtr() { + // No prebarrier necessary as this only happens when we are sweeping. MOZ_ASSERT(CurrentThreadIsGCSweeping()); } #endif @@ -534,6 +535,7 @@ class RelocatablePtr : public BarrieredBase } ~RelocatablePtr() { + this->pre(); if (GCMethods::needsPostBarrier(this->value)) relocate(); }