Pyrogenesis  13997
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
wiocp.cpp
Go to the documentation of this file.
1 #include "precompiled.h"
3 
4 #include "lib/file/file.h" // ERR::IO
6 
7 
8 void AttachToCompletionPort(HANDLE hFile, HANDLE& hIOCP, ULONG_PTR key, DWORD numConcurrentThreads)
9 {
10  WinScopedPreserveLastError s; // CreateIoCompletionPort
11 
12  // (when called for the first time, ends up creating hIOCP)
13  hIOCP = CreateIoCompletionPort(hFile, hIOCP, key, numConcurrentThreads);
15 }
16 
17 
18 Status PollCompletionPort(HANDLE hIOCP, DWORD timeout, DWORD& bytesTransferred, ULONG_PTR& key, OVERLAPPED*& ovl)
19 {
20  if(hIOCP == 0)
21  return ERR::INVALID_HANDLE; // NOWARN (happens if called before the first Attach)
22 
24 
25  bytesTransferred = 0;
26  key = 0;
27  ovl = 0;
28  if(GetQueuedCompletionStatus(hIOCP, &bytesTransferred, &key, &ovl, timeout))
29  return INFO::OK;
30  const Status ret = StatusFromWin();
31  if(ret == ERR::AGAIN || ret == ERR::ABORTED) // avoid polluting last error
32  SetLastError(0);
33  return ret; // NOWARN (let caller decide what to do)
34 }
const Status OK
Definition: status.h:386
some WinAPI functions SetLastError(0) on success, which is bad because it can hide previous errors...
Definition: wutil.h:119
bool wutil_IsValidHandle(H h)
Definition: wutil.h:34
const Status INVALID_HANDLE
Definition: status.h:419
void AttachToCompletionPort(HANDLE hFile, HANDLE &hIOCP, ULONG_PTR key, DWORD numConcurrentThreads)
Definition: wiocp.cpp:8
const Status AGAIN
Definition: status.h:427
const Status ABORTED
Definition: status.h:414
#define ENSURE(expr)
ensure the expression <expr> evaluates to non-zero.
Definition: debug.h:282
void * HANDLE
Definition: wgl.h:62
Status PollCompletionPort(HANDLE hIOCP, DWORD timeout, DWORD &bytesTransferred, ULONG_PTR &key, OVERLAPPED *&ovl)
Definition: wiocp.cpp:18
unsigned long DWORD
Definition: wgl.h:56
pthread_key_t key
Definition: wpthread.cpp:140
Status StatusFromWin()
Definition: wutil.cpp:125
i64 Status
Error handling system.
Definition: status.h:171
static HANDLE hIOCP
Definition: waio.cpp:54