diff options
author | Fabian Kosmale <fabian.kosmale@qt.io> | 2024-02-09 21:40:09 +0100 |
---|---|---|
committer | Fabian Kosmale <fabian.kosmale@qt.io> | 2024-03-05 14:06:29 +0100 |
commit | 2adc2443bbb4d41ee75f9c97be6c3c441dfbecdd (patch) | |
tree | b72e4f53a9d5ef6ede2668534241b5b68f8f183a /src/qml | |
parent | eade82695ffdf4892ded27c50dccc482df8086a2 (diff) |
Prepare for white allocation during gc (5/9): SharedInternalClassData
Employ the new WriteBarrier::Pointer to ensure that MemberData is always
protected.
Change-Id: I3a6d0fddc8fc6d2056023da35c11559bb7701401
Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io>
Reviewed-by: Sami Shalayel <sami.shalayel@qt.io>
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Diffstat (limited to 'src/qml')
-rw-r--r-- | src/qml/jsruntime/qv4internalclass.cpp | 9 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4internalclass_p.h | 4 |
2 files changed, 6 insertions, 7 deletions
diff --git a/src/qml/jsruntime/qv4internalclass.cpp b/src/qml/jsruntime/qv4internalclass.cpp index ddf38c968d..228a6bcd36 100644 --- a/src/qml/jsruntime/qv4internalclass.cpp +++ b/src/qml/jsruntime/qv4internalclass.cpp @@ -67,12 +67,11 @@ void PropertyHash::detach(bool grow, int classSize) SharedInternalClassDataPrivate<PropertyKey>::SharedInternalClassDataPrivate(const SharedInternalClassDataPrivate<PropertyKey> &other) : refcount(1), - engine(other.engine), - data(nullptr) + engine(other.engine) { if (other.alloc()) { const uint s = other.size(); - data = MemberData::allocate(engine, other.alloc(), other.data); + data.set(engine, MemberData::allocate(engine, other.alloc(), other.data)); setSize(s); } } @@ -82,7 +81,7 @@ SharedInternalClassDataPrivate<PropertyKey>::SharedInternalClassDataPrivate(cons : refcount(1), engine(other.engine) { - data = MemberData::allocate(engine, other.alloc(), nullptr); + data.set(engine, MemberData::allocate(engine, other.alloc(), nullptr)); memcpy(data, other.data, sizeof(Heap::MemberData) - sizeof(Value) + pos*sizeof(Value)); data->values.size = pos + 1; data->values.set(engine, pos, Value::fromReturnedValue(value.id())); @@ -92,7 +91,7 @@ void SharedInternalClassDataPrivate<PropertyKey>::grow() { const uint a = alloc() * 2; const uint s = size(); - data = MemberData::allocate(engine, a, data); + data.set(engine, MemberData::allocate(engine, a, data)); setSize(s); Q_ASSERT(alloc() >= a); } diff --git a/src/qml/jsruntime/qv4internalclass_p.h b/src/qml/jsruntime/qv4internalclass_p.h index 68c0fe57a0..56ce787859 100644 --- a/src/qml/jsruntime/qv4internalclass_p.h +++ b/src/qml/jsruntime/qv4internalclass_p.h @@ -177,7 +177,7 @@ private: template<> struct SharedInternalClassDataPrivate<PropertyKey> { - SharedInternalClassDataPrivate(ExecutionEngine *e) : refcount(1), engine(e), data(nullptr) {} + SharedInternalClassDataPrivate(ExecutionEngine *e) : refcount(1), engine(e) {} SharedInternalClassDataPrivate(const SharedInternalClassDataPrivate &other); SharedInternalClassDataPrivate(const SharedInternalClassDataPrivate &other, uint pos, PropertyKey value); ~SharedInternalClassDataPrivate() {} @@ -198,7 +198,7 @@ struct SharedInternalClassDataPrivate<PropertyKey> { int refcount = 1; private: ExecutionEngine *engine; - Heap::MemberData *data; + WriteBarrier::Pointer<Heap::MemberData> data; }; template<typename StringOrSymbol> |