Chromium Code Reviews| Index: remoting/host/host_service_win.cc |
| diff --git a/remoting/host/host_service_win.cc b/remoting/host/host_service_win.cc |
| index b2952a6c69e6e20faebf1cb32e598471b6ae3010..8475ed778b29ee7278ce21606dd90b4c363f3ee8 100644 |
| --- a/remoting/host/host_service_win.cc |
| +++ b/remoting/host/host_service_win.cc |
| @@ -27,15 +27,26 @@ |
| #include "remoting/base/scoped_sc_handle_win.h" |
| #include "remoting/base/shutdownable.h" |
| #include "remoting/host/branding.h" |
| + |
| +#if defined(REMOTING_MULTI_PROCESS) |
| +#include "remoting/host/daemon_process.h" |
| +#endif // defined(REMOTING_MULTI_PROCESS) |
| + |
| #include "remoting/host/host_service_resource.h" |
| #include "remoting/host/usage_stats_consent.h" |
| #include "remoting/host/wts_console_observer_win.h" |
| + |
| +#if !defined(REMOTING_MULTI_PROCESS) |
| #include "remoting/host/wts_session_process_launcher_win.h" |
| +#endif // !defined(REMOTING_MULTI_PROCESS) |
| using base::StringPrintf; |
| namespace { |
| +// Session id that does not represent any session. |
| +const uint32 kInvalidSessionId = 0xffffffffu; |
| + |
| const char kIoThreadName[] = "I/O thread"; |
| // A window class for the session change notifications window. |
| @@ -100,8 +111,8 @@ void HostService::RemoveWtsConsoleObserver(WtsConsoleObserver* observer) { |
| console_observers_.RemoveObserver(observer); |
| } |
| -void HostService::OnLauncherShutdown(Shutdownable* /* launcher */) { |
| - launcher_.reset(NULL); |
| +void HostService::OnShutdownableStopped(Shutdownable* /* launcher */) { |
|
Sergey Ulanov
2012/07/30 19:50:04
OnChildStopped?
alexeypa (please no reviews)
2012/07/30 21:50:03
Done.
|
| + child_.reset(NULL); |
| main_task_runner_->PostTask(FROM_HERE, MessageLoop::QuitClosure()); |
| } |
| @@ -138,8 +149,7 @@ BOOL WINAPI HostService::ConsoleControlHandler(DWORD event) { |
| case CTRL_LOGOFF_EVENT: |
| case CTRL_SHUTDOWN_EVENT: |
| self->main_task_runner_->PostTask(FROM_HERE, base::Bind( |
| - &WtsSessionProcessLauncher::Shutdown, |
| - base::Unretained(self->launcher_.get()))); |
| + &Shutdownable::Shutdown, base::Unretained(self->child_.get()))); |
| self->stopped_event_.Wait(); |
| return TRUE; |
| @@ -182,22 +192,32 @@ int HostService::Run() { |
| } |
| void HostService::RunMessageLoop(MessageLoop* message_loop) { |
| +#if defined(REMOTING_MULTI_PROCESS) |
| + |
| + child_ = DaemonProcess::Create( |
| + main_task_runner_, |
| + base::Bind(&HostService::OnShutdownableStopped, base::Unretained(this))); |
| + |
| +#else |
|
Sergey Ulanov
2012/07/30 19:50:04
// !defined(REMOTING_MULTI_PROCESS)
alexeypa (please no reviews)
2012/07/30 21:50:03
Done.
|
| + |
| // Launch the I/O thread. |
| base::Thread io_thread(kIoThreadName); |
| base::Thread::Options io_thread_options(MessageLoop::TYPE_IO, 0); |
| if (!io_thread.StartWithOptions(io_thread_options)) { |
| - LOG(FATAL) << "Failed to start the I/O thread"; |
| + LOG(ERROR) << "Failed to start the I/O thread"; |
| stopped_event_.Signal(); |
| return; |
| } |
| // Create the session process launcher. |
| - launcher_.reset(new WtsSessionProcessLauncher( |
| - base::Bind(&HostService::OnLauncherShutdown, base::Unretained(this)), |
| + child_.reset(new WtsSessionProcessLauncher( |
| + base::Bind(&HostService::OnShutdownableStopped, base::Unretained(this)), |
| this, |
| main_task_runner_, |
| io_thread.message_loop_proxy())); |
| +#endif // defined(REMOTING_MULTI_PROCESS) |
|
Sergey Ulanov
2012/07/30 19:50:04
nit: // !defined(REMOTING_MULTI_PROCESS)
alexeypa (please no reviews)
2012/07/30 21:50:03
Done.
|
| + |
| // Run the service. |
| message_loop->Run(); |
| @@ -304,8 +324,7 @@ DWORD WINAPI HostService::ServiceControlHandler(DWORD control, |
| case SERVICE_CONTROL_SHUTDOWN: |
| case SERVICE_CONTROL_STOP: |
| self->main_task_runner_->PostTask(FROM_HERE, base::Bind( |
| - &WtsSessionProcessLauncher::Shutdown, |
| - base::Unretained(self->launcher_.get()))); |
| + &Shutdownable::Shutdown, base::Unretained(self->child_.get()))); |
| self->stopped_event_.Wait(); |
| return NO_ERROR; |