diff options
author | Carlo Kok <ck@remobjects.com> | 2013-09-26 18:49:53 +0000 |
---|---|---|
committer | Carlo Kok <ck@remobjects.com> | 2013-09-26 18:49:53 +0000 |
commit | a46964f1bb93d2d4b8bd2880d7007baa53887f29 (patch) | |
tree | 5c7c25d4318457f4ee8aabaae178ed8012e4ed0a /lldb/source/Core/ConnectionFileDescriptor.cpp | |
parent | e435f94b69a7a9102e725af402d45513d2941dfe (diff) | |
download | bcm5719-llvm-a46964f1bb93d2d4b8bd2880d7007baa53887f29.tar.gz bcm5719-llvm-a46964f1bb93d2d4b8bd2880d7007baa53887f29.zip |
On windows a socket and file descriptor aren't the same kind of handle, pass the type to Close so it uses the right api to close it.
llvm-svn: 191446
Diffstat (limited to 'lldb/source/Core/ConnectionFileDescriptor.cpp')
-rw-r--r-- | lldb/source/Core/ConnectionFileDescriptor.cpp | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/lldb/source/Core/ConnectionFileDescriptor.cpp b/lldb/source/Core/ConnectionFileDescriptor.cpp index de5ac59e33b..3a24aa04602 100644 --- a/lldb/source/Core/ConnectionFileDescriptor.cpp +++ b/lldb/source/Core/ConnectionFileDescriptor.cpp @@ -398,16 +398,16 @@ ConnectionFileDescriptor::Disconnect (Error *error_ptr) { if (m_fd_send == m_fd_recv) { - status = Close (m_fd_send, error_ptr); + status = Close (m_fd_send, m_fd_send_type, error_ptr); } else { // File descriptors are the different, close both if needed if (m_fd_send >= 0) - status = Close (m_fd_send, error_ptr); + status = Close (m_fd_send, m_fd_send_type, error_ptr); if (m_fd_recv >= 0) { - ConnectionStatus recv_status = Close (m_fd_recv, error_ptr); + ConnectionStatus recv_status = Close (m_fd_recv, m_fd_recv_type, error_ptr); if (status == eConnectionStatusSuccess) status = recv_status; } @@ -1146,7 +1146,7 @@ ConnectionFileDescriptor::BytesAvailable (uint32_t timeout_usec, Error *error_pt #endif ConnectionStatus -ConnectionFileDescriptor::Close (int& fd, Error *error_ptr) +ConnectionFileDescriptor::Close (int& fd, FDType type, Error *error_ptr) { if (error_ptr) error_ptr->Clear(); @@ -1162,7 +1162,11 @@ ConnectionFileDescriptor::Close (int& fd, Error *error_ptr) Log *log(lldb_private::GetLogIfAnyCategoriesSet (LIBLLDB_LOG_CONNECTION)); if (log) log->Printf ("%p ConnectionFileDescriptor::Close (fd = %i)", this,fd); - +#if _WIN32 + if (type != eFDTypeFile) + success = closesocket(fd) == 0; + else +#endif success = ::close (fd) == 0; // A reference to a FD was passed in, set it to an invalid value fd = -1; @@ -1301,7 +1305,7 @@ ConnectionFileDescriptor::SocketListen (uint16_t listen_port_num, Error *error_p { if (error_ptr) error_ptr->SetErrorToErrno(); - Close (listen_port, NULL); + Close (listen_port, eFDTypeSocket, NULL); return eConnectionStatusError; } @@ -1310,7 +1314,7 @@ ConnectionFileDescriptor::SocketListen (uint16_t listen_port_num, Error *error_p { if (error_ptr) error_ptr->SetErrorToErrno(); - Close (listen_port, NULL); + Close (listen_port, eFDTypeSocket, NULL); return eConnectionStatusError; } @@ -1319,13 +1323,13 @@ ConnectionFileDescriptor::SocketListen (uint16_t listen_port_num, Error *error_p { if (error_ptr) error_ptr->SetErrorToErrno(); - Close (listen_port, NULL); + Close (listen_port, eFDTypeSocket, NULL); return eConnectionStatusError; } } // We are done with the listen port - Close (listen_port, NULL); + Close (listen_port, eFDTypeSocket, NULL); m_should_close_fd = true; |