| Index: remoting/host/desktop_session_agent.cc | 
| diff --git a/remoting/host/desktop_session_agent.cc b/remoting/host/desktop_session_agent.cc | 
| index d3ac87f40e347458f94058982d76dd14c359d040..6f0996e31981a451fccf3bb0ffa28ce7c7ff30d9 100644 | 
| --- a/remoting/host/desktop_session_agent.cc | 
| +++ b/remoting/host/desktop_session_agent.cc | 
| @@ -4,6 +4,7 @@ | 
|  | 
| #include "remoting/host/desktop_session_agent.h" | 
|  | 
| +#include "base/file_util.h" | 
| #include "base/logging.h" | 
| #include "ipc/ipc_channel_proxy.h" | 
| #include "ipc/ipc_message.h" | 
| @@ -76,6 +77,8 @@ DesktopSessionAgent::~DesktopSessionAgent() { | 
| DCHECK(!local_input_monitor_); | 
| DCHECK(!network_channel_); | 
| DCHECK(!video_capturer_); | 
| + | 
| +  CloseDesktopPipeHandle(); | 
| } | 
|  | 
| bool DesktopSessionAgent::OnMessageReceived(const IPC::Message& message) { | 
| @@ -119,6 +122,8 @@ void DesktopSessionAgent::OnChannelConnected(int32 peer_pid) { | 
| DCHECK(caller_task_runner()->BelongsToCurrentThread()); | 
|  | 
| VLOG(1) << "IPC: desktop <- network (" << peer_pid << ")"; | 
| + | 
| +  CloseDesktopPipeHandle(); | 
| } | 
|  | 
| void DesktopSessionAgent::OnChannelError() { | 
| @@ -126,6 +131,7 @@ void DesktopSessionAgent::OnChannelError() { | 
|  | 
| // Make sure the channel is closed. | 
| network_channel_.reset(); | 
| +  CloseDesktopPipeHandle(); | 
|  | 
| // Notify the caller that the channel has been disconnected. | 
| if (delegate_.get()) | 
| @@ -293,7 +299,10 @@ bool DesktopSessionAgent::Start(const base::WeakPtr<Delegate>& delegate, | 
| delegate_ = delegate; | 
|  | 
| // Create an IPC channel to communicate with the network process. | 
| -  return CreateChannelForNetworkProcess(desktop_pipe_out, &network_channel_); | 
| +  bool result = CreateChannelForNetworkProcess(&desktop_pipe_, | 
| +                                               &network_channel_); | 
| +  *desktop_pipe_out = desktop_pipe_; | 
| +  return result; | 
| } | 
|  | 
| void DesktopSessionAgent::Stop() { | 
| @@ -528,10 +537,25 @@ DesktopSessionAgent::DesktopSessionAgent( | 
| input_task_runner_(input_task_runner), | 
| io_task_runner_(io_task_runner), | 
| video_capture_task_runner_(video_capture_task_runner), | 
| +      desktop_pipe_(IPC::InvalidPlatformFileForTransit()), | 
| current_size_(SkISize::Make(0, 0)), | 
| next_shared_buffer_id_(1), | 
| started_(false) { | 
| DCHECK(caller_task_runner_->BelongsToCurrentThread()); | 
| } | 
|  | 
| +void DesktopSessionAgent::CloseDesktopPipeHandle() { | 
| +  if (!(desktop_pipe_ == IPC::InvalidPlatformFileForTransit())) { | 
| +#if defined(OS_WIN) | 
| +    base::ClosePlatformFile(desktop_pipe_); | 
| +#elif defined(OS_POSIX) | 
| +    base::ClosePlatformFile(desktop_pipe_.fd); | 
| +#else  // !defined(OS_POSIX) | 
| +#error Unsupported platform. | 
| +#endif  // !defined(OS_POSIX) | 
| + | 
| +    desktop_pipe_ = IPC::InvalidPlatformFileForTransit(); | 
| +  } | 
| +} | 
| + | 
| }  // namespace remoting | 
|  |