diff options
-rw-r--r-- | chrome/browser/chromeos/login/user_image_screen.cc | 15 | ||||
-rw-r--r-- | chrome/browser/chromeos/login/user_image_screen.h | 3 |
2 files changed, 13 insertions, 5 deletions
diff --git a/chrome/browser/chromeos/login/user_image_screen.cc b/chrome/browser/chromeos/login/user_image_screen.cc index 1bd761f..5180a37 100644 --- a/chrome/browser/chromeos/login/user_image_screen.cc +++ b/chrome/browser/chromeos/login/user_image_screen.cc @@ -5,6 +5,7 @@ #include "chrome/browser/chromeos/login/user_image_screen.h" #include "base/compiler_specific.h" +#include "base/threading/thread_restrictions.h" #include "base/time.h" #include "chrome/browser/chromeos/login/login_utils.h" #include "chrome/browser/chromeos/login/screen_observer.h" @@ -39,8 +40,8 @@ const char kCameraThreadName[] = "Chrome_CameraThread"; UserImageScreen::UserImageScreen(WizardScreenDelegate* delegate) : ViewScreen<UserImageView>(delegate), capture_failure_counter_(0), - camera_init_failure_counter_(0), - camera_thread_(kCameraThreadName) { + camera_init_failure_counter_(0) { + camera_thread_.reset(new base::Thread(kCameraThreadName)); registrar_.Add( this, NotificationType::SCREEN_LOCK_STATE_CHANGED, @@ -50,11 +51,17 @@ UserImageScreen::UserImageScreen(WizardScreenDelegate* delegate) UserImageScreen::~UserImageScreen() { if (camera_.get()) camera_->set_delegate(NULL); + { + // A ScopedAllowIO object is required to join the thread when calling Stop. + // See http://crosbug.com/11392. + base::ThreadRestrictions::ScopedAllowIO allow_io_for_thread_join; + camera_thread_.reset(); + } } void UserImageScreen::Refresh() { - camera_thread_.Start(); - camera_ = new Camera(this, &camera_thread_, true); + camera_thread_->Start(); + camera_ = new Camera(this, camera_thread_.get(), true); InitCamera(); } diff --git a/chrome/browser/chromeos/login/user_image_screen.h b/chrome/browser/chromeos/login/user_image_screen.h index 9a3fef8..20702f4 100644 --- a/chrome/browser/chromeos/login/user_image_screen.h +++ b/chrome/browser/chromeos/login/user_image_screen.h @@ -7,6 +7,7 @@ #pragma once #include "base/threading/thread.h" +#include "base/scoped_ptr.h" #include "chrome/browser/chromeos/login/camera.h" #include "chrome/browser/chromeos/login/user_image_view.h" #include "chrome/browser/chromeos/login/view_screen.h" @@ -64,7 +65,7 @@ class UserImageScreen: public ViewScreen<UserImageView>, int camera_init_failure_counter_; // Thread for camera to work on. - base::Thread camera_thread_; + scoped_ptr<base::Thread> camera_thread_; NotificationRegistrar registrar_; |