diff options
author | wtc@chromium.org <wtc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-01-17 02:06:50 +0000 |
---|---|---|
committer | wtc@chromium.org <wtc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-01-17 02:06:50 +0000 |
commit | 75ddd63be217e7fed76f90578a8918ab75b3ead8 (patch) | |
tree | 1bd51b4add89da645317791551e97b35cd317a6b /net/base | |
parent | e044f8df992fcb9f289b98115d0722dcd8cea103 (diff) | |
download | chromium_src-75ddd63be217e7fed76f90578a8918ab75b3ead8.zip chromium_src-75ddd63be217e7fed76f90578a8918ab75b3ead8.tar.gz chromium_src-75ddd63be217e7fed76f90578a8918ab75b3ead8.tar.bz2 |
Refine a CHECK into several CHECKs to determine the return
value of WaitForSingleObject and the error code.
R=eroman
BUG=6500
Review URL: http://codereview.chromium.org/18182
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@8252 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/base')
-rw-r--r-- | net/base/tcp_client_socket_win.cc | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/net/base/tcp_client_socket_win.cc b/net/base/tcp_client_socket_win.cc index dff0391b..8b15f38 100644 --- a/net/base/tcp_client_socket_win.cc +++ b/net/base/tcp_client_socket_win.cc @@ -215,7 +215,26 @@ int TCPClientSocket::Write(const char* buf, DWORD num; int rv = WSASend(socket_, &buffer_, 1, &num, 0, &overlapped_, NULL); if (rv == 0) { - CHECK(WaitForSingleObject(overlapped_.hEvent, 0) == WAIT_OBJECT_0); + // TODO(wtc): These temporary CHECKs are intended to determine the return + // value and error code of the WaitForSingleObject call if it doesn't + // return the expected WAIT_OBJECT_0. See http://crbug.com/6500. + DWORD wait_rv = WaitForSingleObject(overlapped_.hEvent, 0); + if (wait_rv != WAIT_OBJECT_0) { + if (wait_rv == WAIT_ABANDONED) { + CHECK(false); + } else if (wait_rv == WAIT_TIMEOUT) { + CHECK(false); + } else if (wait_rv == WAIT_FAILED) { + DWORD wait_error = GetLastError(); + if (wait_error == ERROR_INVALID_HANDLE) { + CHECK(false); + } else { + CHECK(false); + } + } else { + CHECK(false); + } + } BOOL ok = WSAResetEvent(overlapped_.hEvent); CHECK(ok); TRACE_EVENT_END("socket.write", this, StringPrintf("%d bytes", num)); |