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

Unified Diff: content/browser/device_orientation/data_fetcher_shared_memory_base.cc

Issue 23441047: Fix race condition in DataFetcherSharedMemoryBase (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 years, 3 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: content/browser/device_orientation/data_fetcher_shared_memory_base.cc
diff --git a/content/browser/device_orientation/data_fetcher_shared_memory_base.cc b/content/browser/device_orientation/data_fetcher_shared_memory_base.cc
index 33727ef78505d11ea7d3e459c4d5d43d24375d10..a13836d104635965e30b2329516c03639a0675fc 100644
--- a/content/browser/device_orientation/data_fetcher_shared_memory_base.cc
+++ b/content/browser/device_orientation/data_fetcher_shared_memory_base.cc
@@ -36,7 +36,7 @@ class DataFetcherSharedMemoryBase::PollingThread : public base::Thread {
PollingThread(const char* name, DataFetcherSharedMemoryBase* fetcher);
virtual ~PollingThread();
- void AddConsumer(ConsumerType consumer_type);
+ void AddConsumer(ConsumerType consumer_type, void* buffer);
void RemoveConsumer(ConsumerType consumer_type);
unsigned GetConsumersBitmask() const { return consumers_bitmask_; }
@@ -63,9 +63,9 @@ DataFetcherSharedMemoryBase::PollingThread::~PollingThread() {
}
void DataFetcherSharedMemoryBase::PollingThread::AddConsumer(
- ConsumerType consumer_type) {
+ ConsumerType consumer_type, void* buffer) {
DCHECK(fetcher_);
- if (!fetcher_->Start(consumer_type))
+ if (!fetcher_->Start(consumer_type, buffer))
return;
consumers_bitmask_ |= consumer_type;
@@ -119,7 +119,8 @@ bool DataFetcherSharedMemoryBase::StartFetchingDeviceData(
if (started_consumers_ & consumer_type)
return true;
- if (!GetSharedMemoryBuffer(consumer_type))
+ void* buffer = GetSharedMemoryBuffer(consumer_type);
+ if (!buffer)
return false;
if (IsPolling()) {
@@ -129,9 +130,9 @@ bool DataFetcherSharedMemoryBase::StartFetchingDeviceData(
FROM_HERE,
base::Bind(&PollingThread::AddConsumer,
base::Unretained(polling_thread_.get()),
- consumer_type));
+ consumer_type, buffer));
} else {
- if (!Start(consumer_type))
+ if (!Start(consumer_type, buffer))
return false;
}

Powered by Google App Engine
This is Rietveld 408576698