diff options
author | scottmg@chromium.org <scottmg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-05 18:55:57 +0000 |
---|---|---|
committer | scottmg@chromium.org <scottmg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-05 18:55:57 +0000 |
commit | ed3bf8a649d33f2ac29be6846904ea905699e824 (patch) | |
tree | f0775bd833badff338ffd35d0975c5ef4acdaf36 /net | |
parent | 0f18d30360d6f592f3a436a5630def6b2f308116 (diff) | |
download | chromium_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.cc | 8 | ||||
-rw-r--r-- | net/url_request/url_request_job.cc | 10 |
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) { |