summaryrefslogtreecommitdiffstats
path: root/chrome_frame/metrics_service.cc
diff options
context:
space:
mode:
authorvitalybuka@chromium.org <vitalybuka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-12-17 04:14:09 +0000
committervitalybuka@chromium.org <vitalybuka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-12-17 04:14:09 +0000
commitdfab59e7797379e752a1570f3be4750826133461 (patch)
treebc4a3342f5aae5db09912455144fe8b123eb6dbb /chrome_frame/metrics_service.cc
parentc7aedfb3adf66e0942b831ca03cfc3c25fb30a29 (diff)
downloadchromium_src-dfab59e7797379e752a1570f3be4750826133461.zip
chromium_src-dfab59e7797379e752a1570f3be4750826133461.tar.gz
chromium_src-dfab59e7797379e752a1570f3be4750826133461.tar.bz2
Stop upload thread when stopping service. Leaked thread may crash process on exit.
BUG=64388 TEST=none Review URL: http://codereview.chromium.org/5845004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@69516 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome_frame/metrics_service.cc')
-rw-r--r--chrome_frame/metrics_service.cc14
1 files changed, 10 insertions, 4 deletions
diff --git a/chrome_frame/metrics_service.cc b/chrome_frame/metrics_service.cc
index 387305f..d82e16b 100644
--- a/chrome_frame/metrics_service.cc
+++ b/chrome_frame/metrics_service.cc
@@ -123,7 +123,8 @@ struct UploadThreadInstanceTraits
// started on. We don't have a good way of achieving this at this point. This
// thread object is currently leaked.
// TODO(ananta)
-// Fix this.
+// TODO(vitalybuka@chromium.org) : Fix this by using MetricsService::Stop() in
+// appropriate location.
base::LazyInstance<base::Thread, UploadThreadInstanceTraits>
g_metrics_upload_thread_(base::LINKER_INITIALIZED);
@@ -414,10 +415,15 @@ void MetricsService::Start() {
// static
void MetricsService::Stop() {
- AutoLock lock(metrics_service_lock_);
+ {
+ AutoLock lock(metrics_service_lock_);
+
+ GetInstance()->SetReporting(false);
+ GetInstance()->SetRecording(false);
+ }
- GetInstance()->SetReporting(false);
- GetInstance()->SetRecording(false);
+ if (GetInstance()->user_permits_upload_)
+ g_metrics_upload_thread_.Get().Stop();
}
void MetricsService::SetRecording(bool enabled) {