summaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorwtc@chromium.org <wtc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-24 22:36:25 +0000
committerwtc@chromium.org <wtc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-24 22:36:25 +0000
commit08c4d78142363907a813876b33d39b8d8bb06441 (patch)
tree229c98a59f4f6a79ad92610c620522b1d1cf0451 /net
parentfd529d6fabc2992da29f60f751480625b930e879 (diff)
downloadchromium_src-08c4d78142363907a813876b33d39b8d8bb06441.zip
chromium_src-08c4d78142363907a813876b33d39b8d8bb06441.tar.gz
chromium_src-08c4d78142363907a813876b33d39b8d8bb06441.tar.bz2
When asserting that an event object is not signaled,
pass important values (the return value of WaitForSingleObject and the error code) as function arguments so that they are available in crash dumps. R=eroman BUG=51950,52008 TEST=none Review URL: http://codereview.chromium.org/3107032 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@57247 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net')
-rw-r--r--net/socket/tcp_client_socket_win.cc25
1 files changed, 19 insertions, 6 deletions
diff --git a/net/socket/tcp_client_socket_win.cc b/net/socket/tcp_client_socket_win.cc
index 3faf41b..3da856b 100644
--- a/net/socket/tcp_client_socket_win.cc
+++ b/net/socket/tcp_client_socket_win.cc
@@ -23,6 +23,21 @@ namespace net {
namespace {
+// Assert that the (manual-reset) event object is not signaled.
+void AssertEventNotSignaled(WSAEVENT hEvent) {
+ DWORD wait_rv = WaitForSingleObject(hEvent, 0);
+ if (wait_rv != WAIT_TIMEOUT) {
+ DWORD err = ERROR_SUCCESS;
+ if (wait_rv == WAIT_FAILED)
+ err = GetLastError();
+ CHECK(false); // Crash.
+ // This LOG statement is unreachable since we have already crashed, but it
+ // should prevent the compiler from optimizing away the |wait_rv| and
+ // |err| variables so they appear nicely on the stack in crash dumps.
+ LOG(INFO) << "wait_rv=" << wait_rv << ", err=" << err;
+ }
+}
+
// If the (manual-reset) event object is signaled, resets it and returns true.
// Otherwise, does nothing and returns false. Called after a Winsock function
// succeeds synchronously
@@ -508,9 +523,8 @@ int TCPClientSocketWin::Read(IOBuffer* buf,
core_->read_buffer_.len = buf_len;
core_->read_buffer_.buf = buf->data();
- // TODO(wtc): Remove the CHECK after enough testing.
- CHECK_EQ(static_cast<DWORD>(WAIT_TIMEOUT),
- WaitForSingleObject(core_->read_overlapped_.hEvent, 0));
+ // TODO(wtc): Remove the assertion after enough testing.
+ AssertEventNotSignaled(core_->read_overlapped_.hEvent);
DWORD num, flags = 0;
int rv = WSARecv(socket_, &core_->read_buffer_, 1, &num, &flags,
&core_->read_overlapped_, NULL);
@@ -558,9 +572,8 @@ int TCPClientSocketWin::Write(IOBuffer* buf,
core_->write_buffer_.buf = buf->data();
core_->write_buffer_length_ = buf_len;
- // TODO(wtc): Remove the CHECK after enough testing.
- CHECK_EQ(static_cast<DWORD>(WAIT_TIMEOUT),
- WaitForSingleObject(core_->write_overlapped_.hEvent, 0));
+ // TODO(wtc): Remove the assertion after enough testing.
+ AssertEventNotSignaled(core_->write_overlapped_.hEvent);
DWORD num;
int rv = WSASend(socket_, &core_->write_buffer_, 1, &num, 0,
&core_->write_overlapped_, NULL);