Chromium Code Reviews| Index: remoting/host/remoting_me2me_host.cc |
| diff --git a/remoting/host/remoting_me2me_host.cc b/remoting/host/remoting_me2me_host.cc |
| index 2d674635495f2a0d81f91a294ff827094411000e..d83d4b20445a37783998559ddb38aad5ac6ee45b 100644 |
| --- a/remoting/host/remoting_me2me_host.cc |
| +++ b/remoting/host/remoting_me2me_host.cc |
| @@ -53,7 +53,8 @@ |
| #include "remoting/protocol/me2me_host_authenticator_factory.h" |
| #if defined(OS_POSIX) |
| -#include "remoting/host/posix/sighup_listener.h" |
| +#include "remoting/host/posix/signal_handler.h" |
| +#include <signal.h> |
|
Lambros
2012/09/05 16:35:54
nit: move system include above project include
Jamie
2012/09/05 21:15:38
Done.
|
| #endif // defined(OS_POSIX) |
| #if defined(OS_MACOSX) |
| @@ -161,6 +162,24 @@ class HostProcess |
| return true; |
| } |
| +#if defined(OS_POSIX) |
| + void SignalHandler(int signum) { |
|
Sergey Ulanov
2012/09/04 22:01:48
Why not separate SighupHandler() and SigtermHandle
Jamie
2012/09/05 21:15:38
Done.
|
| + switch (signum) { |
| + case SIGHUP: |
| + LOG(INFO) << "Caught SIGHUP: Reloading config..."; |
| + ConfigUpdatedDelayed(); |
| + break; |
| + case SIGTERM: |
| + LOG(INFO) << "Caught SIGTERM: Shutting down..."; |
| + context_->network_task_runner()->PostTask(FROM_HERE, base::Bind( |
| + &HostProcess::Shutdown, base::Unretained(this), kSuccessExitCode)); |
|
Lambros
2012/09/05 16:35:54
Could you comment why base::Unretained is safe her
Jamie
2012/09/05 21:15:38
Done.
|
| + break; |
| + default: |
| + LOG(ERROR) << "Ignoring unexpected signal " << signum; |
| + } |
| + } |
| +#endif |
| + |
| void ConfigUpdated() { |
| DCHECK(message_loop_.message_loop_proxy()->BelongsToCurrentThread()); |
| @@ -213,8 +232,9 @@ class HostProcess |
| void ListenForConfigChanges() { |
| #if defined(OS_POSIX) |
| - remoting::RegisterHupSignalHandler( |
| - base::Bind(&HostProcess::ConfigUpdatedDelayed, base::Unretained(this))); |
| + remoting::RegisterSignalHandler( |
| + SIGHUP, |
| + base::Bind(&HostProcess::SignalHandler, base::Unretained(this))); |
| #elif defined(OS_WIN) |
| scoped_refptr<base::files::FilePathWatcher::Delegate> delegate( |
| new ConfigChangedDelegate( |
| @@ -227,6 +247,14 @@ class HostProcess |
| #endif // defined (OS_WIN) |
| } |
| +#if defined(OS_POSIX) |
| + void ListenForShutdownSignal() { |
| + remoting::RegisterSignalHandler( |
| + SIGTERM, |
| + base::Bind(&HostProcess::SignalHandler, base::Unretained(this))); |
| + } |
| +#endif // OS_POSIX |
| + |
| void CreateAuthenticatorFactory() { |
| DCHECK(context_->network_task_runner()->BelongsToCurrentThread()); |
| scoped_ptr<protocol::AuthenticatorFactory> factory( |
| @@ -269,12 +297,20 @@ class HostProcess |
| StartWatchingPolicy(); |
| -#if defined(OS_MACOSX) || defined(OS_WIN) |
| context_->file_task_runner()->PostTask( |
| FROM_HERE, |
| base::Bind(&HostProcess::ListenForConfigChanges, |
| base::Unretained(this))); |
| -#endif |
| + |
| +#if defined(OS_POSIX) |
| + remoting::SignalHandler handler = base::Bind(&HostProcess::SignalHandler, |
| + base::Unretained(this)); |
| + context_->file_task_runner()->PostTask( |
| + FROM_HERE, |
| + base::Bind(&HostProcess::ListenForShutdownSignal, |
| + base::Unretained(this))); |
| +#endif // OS_POSIX |
| + |
| message_loop_.Run(); |
| #if defined(OS_MACOSX) || defined(OS_WIN) |