diff options
author | wtc@chromium.org <wtc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-24 22:36:25 +0000 |
---|---|---|
committer | wtc@chromium.org <wtc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-24 22:36:25 +0000 |
commit | 08c4d78142363907a813876b33d39b8d8bb06441 (patch) | |
tree | 229c98a59f4f6a79ad92610c620522b1d1cf0451 /net | |
parent | fd529d6fabc2992da29f60f751480625b930e879 (diff) | |
download | chromium_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.cc | 25 |
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); |