Index: third_party/WebKit/Source/platform/heap/Handle.h |
diff --git a/third_party/WebKit/Source/platform/heap/Handle.h b/third_party/WebKit/Source/platform/heap/Handle.h |
index 07873b33020088a88649263979e0d189065c6466..f3eed6e3415ff12159be98efedf1ce84496e63c4 100644 |
--- a/third_party/WebKit/Source/platform/heap/Handle.h |
+++ b/third_party/WebKit/Source/platform/heap/Handle.h |
@@ -39,6 +39,7 @@ |
#include "platform/heap/TraceTraits.h" |
#include "platform/heap/Visitor.h" |
#include "wtf/Allocator.h" |
+#include "wtf/Atomics.h" |
#include "wtf/Functional.h" |
#include "wtf/HashFunctions.h" |
#include "wtf/Locker.h" |
@@ -210,11 +211,17 @@ public: |
} |
#endif |
+protected: |
+ T* atomicGet() { return reinterpret_cast<T*>(acquireLoad(reinterpret_cast<void* volatile*>(&m_raw))); } |
+ |
private: |
NO_LAZY_SWEEP_SANITIZE_ADDRESS |
void assign(T* ptr) |
{ |
- m_raw = ptr; |
+ if (crossThreadnessConfiguration == CrossThreadPersistentConfiguration) |
+ releaseStore(reinterpret_cast<void* volatile*>(&m_raw), ptr); |
+ else |
+ m_raw = ptr; |
checkPointer(); |
if (m_raw) { |
if (!m_persistentNode) |
@@ -437,6 +444,8 @@ public: |
template<typename U> |
CrossThreadPersistent(const RawPtr<U>& other) : Parent(other.get()) { } |
+ T* atomicGet() { return Parent::atomicGet(); } |
+ |
template<typename U> |
CrossThreadPersistent& operator=(U* other) |
{ |