Index: ipc/ipc_channel_posix.cc |
diff --git a/ipc/ipc_channel_posix.cc b/ipc/ipc_channel_posix.cc |
index 878853290016620a1276ce2707ed52b8a7fa7f9b..09b72d5e1ef4e2fdc6eaaacfdc399fb3e8a27902 100644 |
--- a/ipc/ipc_channel_posix.cc |
+++ b/ipc/ipc_channel_posix.cc |
@@ -31,6 +31,7 @@ |
#include "base/posix/global_descriptors.h" |
#include "base/process/process_handle.h" |
#include "base/rand_util.h" |
+#include "base/run_loop.h" |
#include "base/stl_util.h" |
#include "base/strings/string_util.h" |
#include "base/synchronization/lock.h" |
@@ -327,7 +328,7 @@ bool Channel::ChannelImpl::CreatePipe( |
bool Channel::ChannelImpl::Connect() { |
if (server_listen_pipe_ == -1 && pipe_ == -1) { |
- DLOG(INFO) << "Channel creation failed: " << pipe_name_; |
+ DLOG(WARNING) << "Channel creation failed: " << pipe_name_; |
return false; |
} |
@@ -519,10 +520,18 @@ bool Channel::ChannelImpl::Send(Message* message) { |
Logging::GetInstance()->OnSendMessage(message, ""); |
#endif // IPC_MESSAGE_LOG_ENABLED |
+ if (!waiting_connect_ && pipe_ == -1) { |
+ delete message; |
+ return false; |
+ } |
+ |
message->TraceMessageBegin(); |
output_queue_.push(message); |
if (!is_blocked_on_write_ && !waiting_connect_) { |
- return ProcessOutgoingMessages(); |
+ if (!ProcessOutgoingMessages()) { |
+ ClosePipeOnError(); |
+ return false; |
+ } |
} |
return true; |
@@ -707,7 +716,11 @@ bool Channel::ChannelImpl::AcceptConnection() { |
// In server mode we will send a hello message when we receive one from a |
// client. |
waiting_connect_ = false; |
- return ProcessOutgoingMessages(); |
+ if (!ProcessOutgoingMessages()) { |
+ ClosePipeOnError(); |
+ return false; |
+ } |
+ return true; |
} else if (mode_ & MODE_SERVER_FLAG) { |
waiting_connect_ = true; |
return true; |