| Index: athena/system/orientation_controller.cc
|
| diff --git a/athena/system/orientation_controller.cc b/athena/system/orientation_controller.cc
|
| index 8996d7db1e7b601ca4b9449cc6d61c0d22b2fd33..511e0cac06fe1eca3cfae142800dd30a4945c58e 100644
|
| --- a/athena/system/orientation_controller.cc
|
| +++ b/athena/system/orientation_controller.cc
|
| @@ -58,21 +58,37 @@ struct DeviceSensorEvent {
|
|
|
| OrientationController::OrientationController()
|
| : DeviceSocketListener(kSocketPath, sizeof(DeviceSensorEvent)),
|
| - last_orientation_change_time_(0) {
|
| + last_orientation_change_time_(0),
|
| + shutdown_(false) {
|
| CHECK(base::MessageLoopForUI::current());
|
| ui_task_runner_ = base::MessageLoopForUI::current()->task_runner();
|
| }
|
|
|
| void OrientationController::InitWith(
|
| - scoped_refptr<base::TaskRunner> io_task_runner) {
|
| - io_task_runner->PostTask(FROM_HERE, base::Bind(
|
| - &OrientationController::WatchForSocketPathOnIO, this));
|
| + scoped_refptr<base::TaskRunner> file_task_runner) {
|
| + file_task_runner_ = file_task_runner;
|
| + file_task_runner->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(&OrientationController::WatchForSocketPathOnFILE, this));
|
| }
|
|
|
| OrientationController::~OrientationController() {
|
| }
|
|
|
| -void OrientationController::WatchForSocketPathOnIO() {
|
| +void OrientationController::Shutdown() {
|
| + CHECK(file_task_runner_);
|
| + StopListening();
|
| + file_task_runner_->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(&OrientationController::ShutdownOnFILE, this));
|
| +}
|
| +
|
| +void OrientationController::ShutdownOnFILE() {
|
| + shutdown_ = true;
|
| + watcher_.reset();
|
| +}
|
| +
|
| +void OrientationController::WatchForSocketPathOnFILE() {
|
| CHECK(base::MessageLoopForIO::current());
|
| if (base::PathExists(base::FilePath(kSocketPath))) {
|
| ui_task_runner_->PostTask(FROM_HERE,
|
| @@ -80,22 +96,23 @@ void OrientationController::WatchForSocketPathOnIO() {
|
| } else {
|
| watcher_.reset(new base::FilePathWatcher);
|
| watcher_->Watch(
|
| - base::FilePath(kSocketPath), false,
|
| - base::Bind(&OrientationController::OnFilePathChangedOnIO, this));
|
| + base::FilePath(kSocketPath),
|
| + false,
|
| + base::Bind(&OrientationController::OnFilePathChangedOnFILE, this));
|
| }
|
| }
|
|
|
| -void OrientationController::OnFilePathChangedOnIO(const base::FilePath& path,
|
| - bool error) {
|
| +void OrientationController::OnFilePathChangedOnFILE(const base::FilePath& path,
|
| + bool error) {
|
| watcher_.reset();
|
| - if (error)
|
| + if (error || shutdown_)
|
| return;
|
|
|
| ui_task_runner_->PostTask(FROM_HERE,
|
| base::Bind(&OrientationController::StartListening, this));
|
| }
|
|
|
| -void OrientationController::OnDataAvailableOnIO(const void* data) {
|
| +void OrientationController::OnDataAvailableOnFILE(const void* data) {
|
| const DeviceSensorEvent* event =
|
| static_cast<const DeviceSensorEvent*>(data);
|
| if (event->type != SENSOR_ACCELEROMETER)
|
| @@ -131,7 +148,7 @@ void OrientationController::OnDataAvailableOnIO(const void* data) {
|
|
|
| void OrientationController::RotateOnUI(gfx::Display::Rotation rotation) {
|
| ScreenManager* screen_manager = ScreenManager::Get();
|
| - // Since this is called from the IO thread, the screen manager may no longer
|
| + // Since this is called from the FILE thread, the screen manager may no longer
|
| // exist.
|
| if (screen_manager)
|
| screen_manager->SetRotation(rotation);
|
|
|