Index: content/browser/gamepad/gamepad_provider.cc |
diff --git a/content/browser/gamepad/gamepad_provider.cc b/content/browser/gamepad/gamepad_provider.cc |
index 642e2445a7bbe8fa0d0fc8fa7fd1fcbe2827c101..06b2165a125385304bfd845f4af3562f7ff1daf5 100644 |
--- a/content/browser/gamepad/gamepad_provider.cc |
+++ b/content/browser/gamepad/gamepad_provider.cc |
@@ -119,9 +119,17 @@ void Provider::DoInitializePollingThread() { |
void Provider::DoPoll() { |
DCHECK(MessageLoop::current() == polling_thread_->message_loop()); |
GamepadHardwareBuffer* hwbuf = SharedMemoryAsHardwareBuffer(); |
- base::subtle::Barrier_AtomicIncrement(&hwbuf->start_marker, 1); |
+ |
+ ANNOTATE_BENIGN_RACE_SIZED( |
+ &hwbuf->buffer, |
+ sizeof(WebKit::WebGamepads), |
+ "Racey reads are discarded"); |
+ |
+ // Acquire the SeqLock. There is only ever one writer to this data. |
+ // See gamepad_hardware_buffer.h. |
+ hwbuf->sequence.WriteBegin(); |
data_fetcher_->GetGamepadData(&hwbuf->buffer, devices_changed_); |
- base::subtle::Barrier_AtomicIncrement(&hwbuf->end_marker, 1); |
+ hwbuf->sequence.WriteEnd(); |
devices_changed_ = false; |
// Schedule our next interval of polling. |
ScheduleDoPoll(); |