| Index: remoting/host/chromoting_host.cc
|
| diff --git a/remoting/host/chromoting_host.cc b/remoting/host/chromoting_host.cc
|
| index 9216fb0598df98e904c69676dd877686885b48b3..40da58c917e941d997b74b603798b88ae12767c3 100644
|
| --- a/remoting/host/chromoting_host.cc
|
| +++ b/remoting/host/chromoting_host.cc
|
| @@ -60,15 +60,19 @@ ChromotingHost::ChromotingHost(
|
| DesktopEnvironmentFactory* desktop_environment_factory,
|
| scoped_ptr<protocol::SessionManager> session_manager,
|
| scoped_refptr<base::SingleThreadTaskRunner> audio_task_runner,
|
| + scoped_refptr<base::SingleThreadTaskRunner> input_task_runner,
|
| scoped_refptr<base::SingleThreadTaskRunner> video_capture_task_runner,
|
| scoped_refptr<base::SingleThreadTaskRunner> video_encode_task_runner,
|
| - scoped_refptr<base::SingleThreadTaskRunner> network_task_runner)
|
| + scoped_refptr<base::SingleThreadTaskRunner> network_task_runner,
|
| + scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner)
|
| : desktop_environment_factory_(desktop_environment_factory),
|
| session_manager_(session_manager.Pass()),
|
| audio_task_runner_(audio_task_runner),
|
| + input_task_runner_(input_task_runner),
|
| video_capture_task_runner_(video_capture_task_runner),
|
| video_encode_task_runner_(video_encode_task_runner),
|
| network_task_runner_(network_task_runner),
|
| + ui_task_runner_(ui_task_runner),
|
| signal_strategy_(signal_strategy),
|
| clients_count_(0),
|
| state_(kInitial),
|
| @@ -241,8 +245,12 @@ void ChromotingHost::OnSessionClosed(ClientSession* client) {
|
| OnClientDisconnected(client->client_jid()));
|
| }
|
|
|
| - client->Stop(base::Bind(&ChromotingHost::OnClientStopped, this));
|
| + client->Stop();
|
| clients_.erase(it);
|
| +
|
| + --clients_count_;
|
| + if (state_ == kStopping && !clients_count_)
|
| + ShutdownFinish();
|
| }
|
|
|
| void ChromotingHost::OnSessionSequenceNumber(ClientSession* session,
|
| @@ -314,9 +322,11 @@ void ChromotingHost::OnIncomingSession(
|
| scoped_refptr<ClientSession> client = new ClientSession(
|
| this,
|
| audio_task_runner_,
|
| + input_task_runner_,
|
| video_capture_task_runner_,
|
| video_encode_task_runner_,
|
| network_task_runner_,
|
| + ui_task_runner_,
|
| connection.Pass(),
|
| desktop_environment_factory_,
|
| max_session_duration_);
|
| @@ -380,14 +390,6 @@ void ChromotingHost::SetUiStrings(const UiStrings& ui_strings) {
|
| ui_strings_ = ui_strings;
|
| }
|
|
|
| -void ChromotingHost::OnClientStopped() {
|
| - DCHECK(network_task_runner_->BelongsToCurrentThread());
|
| -
|
| - --clients_count_;
|
| - if (state_ == kStopping && !clients_count_)
|
| - ShutdownFinish();
|
| -}
|
| -
|
| void ChromotingHost::ShutdownFinish() {
|
| DCHECK(network_task_runner_->BelongsToCurrentThread());
|
| DCHECK_EQ(state_, kStopping);
|
|
|