Chromium Code Reviews| Index: components/arc/arc_session.cc |
| diff --git a/components/arc/arc_session.cc b/components/arc/arc_session.cc |
| index b27415a94eff714db4957317936aaccfb74d8ba1..0357c21983db2e0175dae96e6bb9ad38a3032354 100644 |
| --- a/components/arc/arc_session.cc |
| +++ b/components/arc/arc_session.cc |
| @@ -219,7 +219,8 @@ class ArcSessionImpl : public ArcSession, |
| // DBus callback for StartArcInstance(). |
| void OnInstanceStarted(mojo::edk::ScopedPlatformHandle socket_fd, |
| - StartArcInstanceResult result); |
| + StartArcInstanceResult result, |
| + const std::string& container_instance_id); |
| // Synchronously accepts a connection on |socket_fd| and then processes the |
| // connected socket's file descriptor. |
| @@ -232,7 +233,8 @@ class ArcSessionImpl : public ArcSession, |
| void StopArcInstance(); |
| // chromeos::SessionManagerClient::Observer: |
| - void ArcInstanceStopped(bool clean) override; |
| + void ArcInstanceStopped(bool clean, |
| + const std::string& container_instance_id) override; |
| // Completes the termination procedure. |
| void OnStopped(ArcStopReason reason); |
| @@ -253,6 +255,10 @@ class ArcSessionImpl : public ArcSession, |
| // When Stop() is called, this flag is set. |
| bool stop_requested_ = false; |
| + // Container instance id passed from session_manager. |
| + // Should be available only after OnInstanceStarted. |
|
Luis Héctor Chávez
2017/05/19 15:23:03
nit: OnInstanceStarted()
hidehiko
2017/05/22 08:38:06
Done.
|
| + std::string container_instance_id_; |
| + |
| // In CONNECTING_MOJO state, this is set to the write side of the pipe |
| // to notify cancelling of the procedure. |
| base::ScopedFD accept_cancel_pipe_; |
| @@ -381,16 +387,11 @@ void ArcSessionImpl::OnSocketCreated( |
| void ArcSessionImpl::OnInstanceStarted( |
| mojo::edk::ScopedPlatformHandle socket_fd, |
| - StartArcInstanceResult result) { |
| + StartArcInstanceResult result, |
| + const std::string& container_instance_id) { |
| DCHECK(thread_checker_.CalledOnValidThread()); |
| - if (state_ == State::STOPPED) { |
| - // This is the case that error is notified via DBus before the |
| - // OnInstanceStarted() callback is invoked. The stopping procedure has |
| - // been run, so do nothing. |
| - return; |
| - } |
| - |
| DCHECK_EQ(state_, State::STARTING_INSTANCE); |
| + container_instance_id_ = container_instance_id; |
| if (stop_requested_) { |
| if (result == StartArcInstanceResult::SUCCESS) { |
| @@ -481,14 +482,6 @@ mojo::ScopedMessagePipeHandle ArcSessionImpl::ConnectMojo( |
| void ArcSessionImpl::OnMojoConnected( |
| mojo::ScopedMessagePipeHandle server_pipe) { |
| DCHECK(thread_checker_.CalledOnValidThread()); |
| - |
| - if (state_ == State::STOPPED) { |
| - // This is the case that error is notified via DBus before the |
| - // OnMojoConnected() callback is invoked. The stopping procedure has |
| - // been run, so do nothing. |
| - return; |
| - } |
| - |
| DCHECK_EQ(state_, State::CONNECTING_MOJO); |
| accept_cancel_pipe_.reset(); |
| @@ -576,11 +569,19 @@ void ArcSessionImpl::StopArcInstance() { |
| base::Bind(&DoNothingInstanceStopped)); |
| } |
| -void ArcSessionImpl::ArcInstanceStopped(bool clean) { |
| +void ArcSessionImpl::ArcInstanceStopped( |
| + bool clean, |
| + const std::string& container_instance_id) { |
| DCHECK(thread_checker_.CalledOnValidThread()); |
| VLOG(1) << "Notified that ARC instance is stopped " |
| << (clean ? "cleanly" : "uncleanly"); |
| + if (container_instance_id != container_instance_id_) { |
| + VLOG(1) << "Container instance id mismatch. Do nothing." |
| + << container_instance_id << " vs " << container_instance_id_; |
| + return; |
| + } |
|
Luis Héctor Chávez
2017/05/19 15:23:03
nit: do you want to reset the container id here? J
hidehiko
2017/05/22 08:38:06
Done.
|
| + |
| // In case that crash happens during before the Mojo channel is connected, |
| // unlock the BlockingPool thread. |
| accept_cancel_pipe_.reset(); |