From 4994702e4b65cbc3066019c353d463a38852a758 Mon Sep 17 00:00:00 2001 From: Artem Udovichenko Date: Mon, 14 Nov 2022 20:23:45 +0300 Subject: [PATCH] Use barriers when changing class Change-Id: I512c7f2ee3ebae598ab2eeffca24f2cf0acc78b6 --- runtime/ecma_class_linker_extension.cpp | 2 +- runtime/mem/tagged_object-inl.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/runtime/ecma_class_linker_extension.cpp b/runtime/ecma_class_linker_extension.cpp index 745431ed8..9bba23ed3 100644 --- a/runtime/ecma_class_linker_extension.cpp +++ b/runtime/ecma_class_linker_extension.cpp @@ -112,7 +112,7 @@ Class *EcmaClassLinkerExtension::NewClass(const uint8_t *descriptor, size_t vtab // All fields must be set before call SetClass to make TSAN happy. // The intstance of this HClass may be read by update remset thread. // The thread skips the object if this class is null. - hclass_ptr->SetClass(hclass_ptr); + hclass_ptr->SetClassWithoutBarrier(hclass_ptr); JSHandle klass_obj(vm_->GetJSThread(), factory->NewNonMovableDynObject(hclass)); auto *klass = diff --git a/runtime/mem/tagged_object-inl.h b/runtime/mem/tagged_object-inl.h index dd79d8a86..420265d71 100644 --- a/runtime/mem/tagged_object-inl.h +++ b/runtime/mem/tagged_object-inl.h @@ -30,12 +30,12 @@ inline void TaggedObject::SetClassWithoutBarrier(JSHClass *hclass) inline void TaggedObject::SetClass(JSHClass *hclass) { - ObjectHeader::SetClass(hclass->GetHClass()); + ObjectAccessor::SetClass(this, hclass->GetHClass()); } inline void TaggedObject::SetClass(JSHandle hclass) { - ObjectHeader::SetClass(hclass->GetHClass()); + ObjectAccessor::SetClass(this, hclass->GetHClass()); } inline JSHClass *TaggedObject::GetClass() const -- Gitee