Index: ipc/ipc_channel_posix.cc |
diff --git a/ipc/ipc_channel_posix.cc b/ipc/ipc_channel_posix.cc |
index 878853290016620a1276ce2707ed52b8a7fa7f9b..e539d4f929caa746709b81b996c2e5e99bae71d2 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; |
} |
@@ -515,6 +516,9 @@ bool Channel::ChannelImpl::Send(Message* message) { |
<< " with type " << message->type() |
<< " (" << output_queue_.size() << " in queue)"; |
+ if (!waiting_connect_ && pipe_ == -1) |
+ return false; |
+ |
#ifdef IPC_MESSAGE_LOG_ENABLED |
Logging::GetInstance()->OnSendMessage(message, ""); |
#endif // IPC_MESSAGE_LOG_ENABLED |
@@ -522,7 +526,10 @@ bool Channel::ChannelImpl::Send(Message* message) { |
message->TraceMessageBegin(); |
output_queue_.push(message); |
if (!is_blocked_on_write_ && !waiting_connect_) { |
- return ProcessOutgoingMessages(); |
+ if (!ProcessOutgoingMessages()) { |
+ ClosePipeOnError(); |
+ return false; |
+ } |
} |
return true; |
@@ -707,7 +714,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; |