OLD | NEW |
| (Empty) |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "net/base/winsock_util.h" | |
6 | |
7 #include "base/logging.h" | |
8 #include "net/base/net_errors.h" | |
9 | |
10 namespace net { | |
11 | |
12 namespace { | |
13 | |
14 // Prevent the compiler from optimizing away the arguments so they appear | |
15 // nicely on the stack in crash dumps. | |
16 #pragma warning(push) | |
17 #pragma warning (disable: 4748) | |
18 #pragma optimize( "", off ) | |
19 | |
20 // Pass the important values as function arguments so that they are available | |
21 // in crash dumps. | |
22 void CheckEventWait(WSAEVENT hEvent, DWORD wait_rv, DWORD expected) { | |
23 if (wait_rv != expected) { | |
24 DWORD err = ERROR_SUCCESS; | |
25 if (wait_rv == WAIT_FAILED) | |
26 err = GetLastError(); | |
27 CHECK(false); // Crash. | |
28 } | |
29 } | |
30 | |
31 #pragma optimize( "", on ) | |
32 #pragma warning(pop) | |
33 | |
34 } // namespace | |
35 | |
36 void AssertEventNotSignaled(WSAEVENT hEvent) { | |
37 DWORD wait_rv = WaitForSingleObject(hEvent, 0); | |
38 CheckEventWait(hEvent, wait_rv, WAIT_TIMEOUT); | |
39 } | |
40 | |
41 bool ResetEventIfSignaled(WSAEVENT hEvent) { | |
42 // TODO(wtc): Remove the CHECKs after enough testing. | |
43 DWORD wait_rv = WaitForSingleObject(hEvent, 0); | |
44 if (wait_rv == WAIT_TIMEOUT) | |
45 return false; // The event object is not signaled. | |
46 CheckEventWait(hEvent, wait_rv, WAIT_OBJECT_0); | |
47 BOOL ok = WSAResetEvent(hEvent); | |
48 CHECK(ok); | |
49 return true; | |
50 } | |
51 | |
52 } // namespace net | |
OLD | NEW |