summaryrefslogtreecommitdiffstats
path: root/ipc/ipc_channel_win.cc
diff options
context:
space:
mode:
authorrvargas@chromium.org <rvargas@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-07-31 12:24:29 +0000
committerrvargas@chromium.org <rvargas@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-07-31 12:24:29 +0000
commit65727eb275749203a7cd86602251a7d903af3860 (patch)
treed3ceacc8ed50708026300a12546b48eb5769be70 /ipc/ipc_channel_win.cc
parentac4d90489876c530c4d7fc98c8c43a392c5d2f5f (diff)
downloadchromium_src-65727eb275749203a7cd86602251a7d903af3860.zip
chromium_src-65727eb275749203a7cd86602251a7d903af3860.tar.gz
chromium_src-65727eb275749203a7cd86602251a7d903af3860.tar.bz2
IPC: Add more debug logic (crash tracking)
BUG=387876 R=cpu@chromium.org Review URL: https://codereview.chromium.org/427693004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@286759 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ipc/ipc_channel_win.cc')
-rw-r--r--ipc/ipc_channel_win.cc11
1 files changed, 9 insertions, 2 deletions
diff --git a/ipc/ipc_channel_win.cc b/ipc/ipc_channel_win.cc
index 9741dda..0dcde17 100644
--- a/ipc/ipc_channel_win.cc
+++ b/ipc/ipc_channel_win.cc
@@ -63,10 +63,11 @@ ChannelWin::ChannelWin(const IPC::ChannelHandle &channel_handle,
peer_pid_(base::kNullProcessId),
waiting_connect_(mode & MODE_SERVER_FLAG),
processing_incoming_(false),
- weak_factory_(this),
validate_client_(false),
+ writing_(false),
debug_flags_(0),
- client_secret_(0) {
+ client_secret_(0),
+ weak_factory_(this) {
CreatePipe(channel_handle, mode);
}
@@ -426,6 +427,8 @@ bool ChannelWin::ProcessOutgoingMessages(
Message* m = output_queue_.front();
DCHECK(m->size() <= INT_MAX);
debug_flags_ |= WRITE_MSG;
+ CHECK(!writing_);
+ writing_ = true;
BOOL ok = WriteFile(pipe_,
m->data(),
static_cast<int>(m->size()),
@@ -441,6 +444,7 @@ bool ChannelWin::ProcessOutgoingMessages(
return true;
}
+ writing_ = false;
LOG(ERROR) << "pipe error: " << err;
return false;
}
@@ -498,6 +502,9 @@ void ChannelWin::OnIOCompleted(
ok = ProcessIncomingMessages();
} else {
DCHECK(context == &output_state_.context);
+ CHECK(writing_);
+ CHECK(output_state_.is_pending);
+ writing_ = false;
debug_flags_ |= WRITE_COMPLETED;
if (debug_flags_ & WAIT_FOR_WRITE) {
CHECK(!(debug_flags_ & WAIT_FOR_WRITE_COMPLETE));