99#include " lldb/Host/windows/MainLoopWindows.h"
1010#include " lldb/Host/Config.h"
1111#include " lldb/Host/Socket.h"
12+ #include " lldb/Host/windows/windows.h"
1213#include " lldb/Utility/Status.h"
1314#include " llvm/Config/llvm-config.h"
1415#include " llvm/Support/Casting.h"
1819#include < cerrno>
1920#include < csignal>
2021#include < ctime>
22+ #include < io.h>
2123#include < vector>
2224#include < winsock2.h>
2325
@@ -39,9 +41,8 @@ namespace {
3941class PipeEvent : public MainLoopWindows ::IOEvent {
4042public:
4143 explicit PipeEvent (HANDLE handle)
42- : IOEvent((IOObject::WaitableHandle)CreateEventW(
43- NULL , /* bManualReset=*/ FALSE ,
44- /* bInitialState=*/ FALSE , NULL )),
44+ : IOEvent(CreateEventW(NULL , /* bManualReset=*/ FALSE ,
45+ /* bInitialState=*/ FALSE , NULL )),
4546 m_handle(handle), m_ready(CreateEventW(NULL , /* bManualReset=*/ FALSE ,
4647 /* bInitialState=*/ FALSE , NULL )) {
4748 assert (m_event && m_ready);
@@ -53,12 +54,12 @@ class PipeEvent : public MainLoopWindows::IOEvent {
5354 SetEvent (m_ready);
5455 // Keep trying to cancel ReadFile() until the thread exits.
5556 do {
56- CancelIoEx ((HANDLE) m_handle, /* lpOverlapped=*/ NULL );
57+ CancelIoEx (m_handle, /* lpOverlapped=*/ NULL );
5758 } while (WaitForSingleObject (m_monitor_thread.native_handle (), 1 ) ==
5859 WAIT_TIMEOUT);
5960 m_monitor_thread.join ();
6061 }
61- CloseHandle ((HANDLE) m_event);
62+ CloseHandle (m_event);
6263 CloseHandle (m_ready);
6364 }
6465
@@ -107,7 +108,7 @@ class PipeEvent : public MainLoopWindows::IOEvent {
107108 continue ;
108109 }
109110
110- SetEvent ((HANDLE) m_event);
111+ SetEvent (m_event);
111112
112113 // Wait until the current read is consumed before doing the next read.
113114 WaitForSingleObject (m_ready, INFINITE);
@@ -124,15 +125,15 @@ class PipeEvent : public MainLoopWindows::IOEvent {
124125class SocketEvent : public MainLoopWindows ::IOEvent {
125126public:
126127 explicit SocketEvent (SOCKET socket)
127- : IOEvent((IOObject::WaitableHandle) WSACreateEvent()), m_socket(socket) {
128+ : IOEvent(WSACreateEvent()), m_socket(socket) {
128129 assert (m_event != WSA_INVALID_EVENT);
129130 }
130131
131- ~SocketEvent () override { WSACloseEvent ((HANDLE) m_event); }
132+ ~SocketEvent () override { WSACloseEvent (m_event); }
132133
133134 void WillPoll () {
134- int result = WSAEventSelect (m_socket, (HANDLE)m_event,
135- FD_READ | FD_ACCEPT | FD_CLOSE);
135+ int result =
136+ WSAEventSelect (m_socket, m_event, FD_READ | FD_ACCEPT | FD_CLOSE);
136137 assert (result == 0 );
137138 UNUSED_IF_ASSERT_DISABLED (result);
138139 }
@@ -143,7 +144,7 @@ class SocketEvent : public MainLoopWindows::IOEvent {
143144 UNUSED_IF_ASSERT_DISABLED (result);
144145 }
145146
146- void Disarm () override { WSAResetEvent ((HANDLE) m_event); }
147+ void Disarm () override { WSAResetEvent (m_event); }
147148
148149 SOCKET m_socket;
149150};
@@ -167,7 +168,7 @@ llvm::Expected<size_t> MainLoopWindows::Poll() {
167168 events.reserve (m_read_fds.size () + 1 );
168169 for (auto &[_, fd_info] : m_read_fds) {
169170 fd_info.event ->WillPoll ();
170- events.push_back ((HANDLE) fd_info.event ->GetHandle ());
171+ events.push_back (fd_info.event ->GetHandle ());
171172 }
172173 events.push_back (m_interrupt_event);
173174
@@ -206,16 +207,21 @@ MainLoopWindows::RegisterReadObject(const IOObjectSP &object_sp,
206207 return nullptr ;
207208 }
208209
209- if (object_sp->GetFdType () == IOObject::eFDTypeSocket)
210+ if (object_sp->GetFdType () == IOObject::eFDTypeSocket) {
210211 m_read_fds[waitable_handle] = {
211- std::make_unique<SocketEvent>((SOCKET)waitable_handle), callback};
212- else if (GetFileType (waitable_handle) == FILE_TYPE_PIPE)
213- m_read_fds[waitable_handle] = {
214- std::make_unique<PipeEvent>((HANDLE)waitable_handle), callback};
215- else {
216- error = Status::FromErrorStringWithFormat (" Unsupported file type %d" ,
217- GetFileType (waitable_handle));
218- return nullptr ;
212+ std::make_unique<SocketEvent>(
213+ reinterpret_cast <SOCKET>(waitable_handle)),
214+ callback};
215+ } else {
216+ DWORD file_type = GetFileType (waitable_handle);
217+ if (file_type != FILE_TYPE_PIPE) {
218+ error = Status::FromErrorStringWithFormat (" Unsupported file type %d" ,
219+ file_type);
220+ return nullptr ;
221+ }
222+
223+ m_read_fds[waitable_handle] = {std::make_unique<PipeEvent>(waitable_handle),
224+ callback};
219225 }
220226
221227 return CreateReadHandle (object_sp);
0 commit comments