Index: remoting/host/remoting_me2me_host.cc |
diff --git a/remoting/host/remoting_me2me_host.cc b/remoting/host/remoting_me2me_host.cc |
index f880803c2c3388a96b66652c85f1ad8c4df16951..444d5aba3219f776eb867d9192663162ccd34c48 100644 |
--- a/remoting/host/remoting_me2me_host.cc |
+++ b/remoting/host/remoting_me2me_host.cc |
@@ -19,6 +19,7 @@ |
#include "base/strings/string_number_conversions.h" |
#include "base/strings/string_util.h" |
#include "base/strings/utf_string_conversions.h" |
+#include "base/synchronization/waitable_event.h" |
#include "base/threading/thread.h" |
#include "build/build_config.h" |
#include "crypto/nss_util.h" |
@@ -259,8 +260,6 @@ |
void ShutdownOnNetworkThread(); |
- void OnPolicyWatcherShutdown(); |
- |
// Crashes the process in response to a daemon's request. The daemon passes |
// the location of the code that detected the fatal error resulted in this |
// request. |
@@ -525,8 +524,8 @@ |
// already loaded so PolicyWatcher has to be started here. Separate policy |
// loading from policy verifications and move |policy_watcher_| |
// initialization to StartOnNetworkThread(). |
- policy_watcher_ = policy_hack::PolicyWatcher::Create( |
- nullptr, context_->network_task_runner()); |
+ policy_watcher_.reset( |
+ policy_hack::PolicyWatcher::Create(context_->file_task_runner())); |
policy_watcher_->StartWatching( |
base::Bind(&HostProcess::OnPolicyUpdate, base::Unretained(this))); |
} else { |
@@ -1412,23 +1411,22 @@ |
state_ = HOST_STOPPED; |
if (policy_watcher_.get()) { |
- policy_watcher_->StopWatching( |
- base::Bind(&HostProcess::OnPolicyWatcherShutdown, this)); |
- } else { |
- OnPolicyWatcherShutdown(); |
+ base::WaitableEvent done_event(true, false); |
+ policy_watcher_->StopWatching(&done_event); |
+ done_event.Wait(); |
+ policy_watcher_.reset(); |
} |
+ |
+ config_watcher_.reset(); |
+ |
+ // Complete the rest of shutdown on the main thread. |
+ context_->ui_task_runner()->PostTask( |
+ FROM_HERE, |
+ base::Bind(&HostProcess::ShutdownOnUiThread, this)); |
} else { |
// This method is only called in STOPPING_TO_RESTART and STOPPING states. |
NOTREACHED(); |
} |
-} |
- |
-void HostProcess::OnPolicyWatcherShutdown() { |
- policy_watcher_.reset(); |
- |
- // Complete the rest of shutdown on the main thread. |
- context_->ui_task_runner()->PostTask( |
- FROM_HERE, base::Bind(&HostProcess::ShutdownOnUiThread, this)); |
} |
void HostProcess::OnCrash(const std::string& function_name, |