summaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorscottmg@chromium.org <scottmg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-05 18:55:57 +0000
committerscottmg@chromium.org <scottmg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-05 18:55:57 +0000
commited3bf8a649d33f2ac29be6846904ea905699e824 (patch)
treef0775bd833badff338ffd35d0975c5ef4acdaf36 /net
parent0f18d30360d6f592f3a436a5630def6b2f308116 (diff)
downloadchromium_src-ed3bf8a649d33f2ac29be6846904ea905699e824.zip
chromium_src-ed3bf8a649d33f2ac29be6846904ea905699e824.tar.gz
chromium_src-ed3bf8a649d33f2ac29be6846904ea905699e824.tar.bz2
Revert of Attempting to resolve a race condition with PowerMonitor (https://codereview.chromium.org/179923006/)
Reason for revert: Failing interactive_ui_tests dbg: http://build.chromium.org/p/chromium.win/builders/Interactive%20Tests%20(dbg)/builds/47083/steps/interactive_ui_tests/logs/stdio Original issue's description: > Attempting to resolve a race condition with PowerMonitor. > > ThreadSanitizer caught multiple instances where PowerMonitor::Get or PowerMonitor::Add/RemoveObserver were being called concurrently with the PowerMonitor constructor in the main thread. These functions access a process-global PowerMontior instance (g_power_monitor), which was not thread safe. > > This change adds locks around PowerMonitor creation and deletion, and forces Add/RemoveObserver to be called in a threadsafe manner. It also removes the need to call PowerMonitor::Get. > > BUG=268924 > > Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=262018 TBR=mattm@chromium.org,jyasskin@chromium.org,kbr@chromium.org,bradnelson@chromium.org,brettw@chromium.org,bradchen@chromium.org,willchan@chromium.org,jam@chromium.org,jochen@chromium.org,timurrrr@chromium.org,glider@chromium.org,acolwell@chromium.org,scherkus@chromium.org,bajones@chromium.org NOTREECHECKS=true NOTRY=true BUG=268924 Review URL: https://codereview.chromium.org/226263008 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@262026 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net')
-rw-r--r--net/http/http_network_layer.cc8
-rw-r--r--net/url_request/url_request_job.cc10
2 files changed, 14 insertions, 4 deletions
diff --git a/net/http/http_network_layer.cc b/net/http/http_network_layer.cc
index 9d6dc04..0704de4 100644
--- a/net/http/http_network_layer.cc
+++ b/net/http/http_network_layer.cc
@@ -25,13 +25,17 @@ HttpNetworkLayer::HttpNetworkLayer(HttpNetworkSession* session)
suspended_(false) {
DCHECK(session_.get());
#if defined(OS_WIN)
- base::PowerMonitor::AddObserver(this);
+ base::PowerMonitor* power_monitor = base::PowerMonitor::Get();
+ if (power_monitor)
+ power_monitor->AddObserver(this);
#endif
}
HttpNetworkLayer::~HttpNetworkLayer() {
#if defined(OS_WIN)
- base::PowerMonitor::RemoveObserver(this);
+ base::PowerMonitor* power_monitor = base::PowerMonitor::Get();
+ if (power_monitor)
+ power_monitor->RemoveObserver(this);
#endif
}
diff --git a/net/url_request/url_request_job.cc b/net/url_request/url_request_job.cc
index 1332669..31a0d50 100644
--- a/net/url_request/url_request_job.cc
+++ b/net/url_request/url_request_job.cc
@@ -36,7 +36,9 @@ URLRequestJob::URLRequestJob(URLRequest* request,
deferred_redirect_status_code_(-1),
network_delegate_(network_delegate),
weak_factory_(this) {
- base::PowerMonitor::AddObserver(this);
+ base::PowerMonitor* power_monitor = base::PowerMonitor::Get();
+ if (power_monitor)
+ power_monitor->AddObserver(this);
}
void URLRequestJob::SetUpload(UploadDataStream* upload) {
@@ -244,7 +246,11 @@ void URLRequestJob::OnSuspend() {
void URLRequestJob::NotifyURLRequestDestroyed() {
}
-URLRequestJob::~URLRequestJob() { base::PowerMonitor::RemoveObserver(this); }
+URLRequestJob::~URLRequestJob() {
+ base::PowerMonitor* power_monitor = base::PowerMonitor::Get();
+ if (power_monitor)
+ power_monitor->RemoveObserver(this);
+}
void URLRequestJob::NotifyCertificateRequested(
SSLCertRequestInfo* cert_request_info) {