Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(21)

Unified Diff: Source/wtf/Atomics.h

Issue 1256053006: Protect AudioScheduledSoureNode::m_startTime and m_endTime. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Rebase Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/wtf/Atomics.h
diff --git a/Source/wtf/Atomics.h b/Source/wtf/Atomics.h
index 6013a8321849c34627727b7387080855f064a685..51e5ddba80af7bacf945d9fc4f66ccc54fbb4802 100644
--- a/Source/wtf/Atomics.h
+++ b/Source/wtf/Atomics.h
@@ -162,6 +162,24 @@ ALWAYS_INLINE void releaseStore(void* volatile* ptr, void* value)
{
__tsan_atomic64_store(reinterpret_cast<volatile __tsan_atomic64*>(ptr), reinterpret_cast<__tsan_atomic64>(value), __tsan_memory_order_release);
}
+ALWAYS_INLINE void releaseStore(volatile float* ptr, float value)
+{
+ union {
tkent 2015/08/07 01:10:04 should have static_assert for sizeof(int) == sizeo
Raymond Toy 2015/08/07 16:16:37 Done.
+ int ivalue;
+ float fvalue;
+ } u;
+ u.fvalue = value;
+ __tsan_atomic32_store(reinterpret_cast<volatile __tsan_atomic32*>(ptr), u.ivalue, __tsan_memory_order_release);
+}
+ALWAYS_INLINE void releaseStore(volatile double* ptr, double value)
+{
+ union {
+ long ivalue;
+ double dvalue;
+ } u;
+ u.dvalue = value;
+ __tsan_atomic64_store(reinterpret_cast<volatile __tsan_atomic64*>(ptr), u.ivalue, __tsan_memory_order_release);
+}
ALWAYS_INLINE int acquireLoad(volatile const int* ptr)
{
@@ -183,6 +201,24 @@ ALWAYS_INLINE void* acquireLoad(void* volatile const* ptr)
{
return reinterpret_cast<void*>(__tsan_atomic64_load(reinterpret_cast<volatile const __tsan_atomic64*>(ptr), __tsan_memory_order_acquire));
}
+ALWAYS_INLINE float acquireLoad(volatile const float* ptr)
+{
+ union {
+ int ivalue;
+ float fvalue;
+ } u;
+ u.ivalue = __tsan_atomic32_load(reinterpret_cast<volatile const int*>(ptr), __tsan_memory_order_acquire);
+ return u.fvalue;
+}
+ALWAYS_INLINE double acquireLoad(volatile const double* ptr)
+{
+ union {
+ long ivalue;
+ double dvalue;
+ } u;
+ u.ivalue = static_cast<long>(__tsan_atomic64_load(reinterpret_cast<volatile const __tsan_atomic64*>(ptr), __tsan_memory_order_acquire));
+ return u.dvalue;
+}
#endif
#else // defined(THREAD_SANITIZER)
@@ -243,6 +279,17 @@ ALWAYS_INLINE void releaseStore(void* volatile* ptr, void* value)
MEMORY_BARRIER();
*ptr = value;
}
+ALWAYS_INLINE void releaseStore(volatile float* ptr, float value)
+{
+ MEMORY_BARRIER();
+ *ptr = value;
+}
+ALWAYS_INLINE void releaseStore(volatile double* ptr, double value)
+{
+ MEMORY_BARRIER();
+ *ptr = value;
+}
+
ALWAYS_INLINE int acquireLoad(volatile const int* ptr)
{
@@ -280,6 +327,18 @@ ALWAYS_INLINE void* acquireLoad(void* volatile const* ptr)
MEMORY_BARRIER();
return value;
}
+ALWAYS_INLINE float acquireLoad(volatile const float* ptr)
+{
+ float value = *ptr;
+ MEMORY_BARRIER();
+ return value;
+}
+ALWAYS_INLINE double acquireLoad(volatile const double* ptr)
+{
+ double value = *ptr;
+ MEMORY_BARRIER();
+ return value;
+}
#if defined(ADDRESS_SANITIZER)

Powered by Google App Engine
This is Rietveld 408576698