Author: carlokok
Date: Thu Sep 26 13:49:53 2013
New Revision: 191446

URL: http://llvm.org/viewvc/llvm-project?rev=191446&view=rev
Log:
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.

Modified:
    lldb/trunk/include/lldb/Core/ConnectionFileDescriptor.h
    lldb/trunk/source/Core/ConnectionFileDescriptor.cpp

Modified: lldb/trunk/include/lldb/Core/ConnectionFileDescriptor.h
URL: 
http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/ConnectionFileDescriptor.h?rev=191446&r1=191445&r2=191446&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Core/ConnectionFileDescriptor.h (original)
+++ lldb/trunk/include/lldb/Core/ConnectionFileDescriptor.h Thu Sep 26 13:49:53 
2013
@@ -77,6 +77,13 @@ public:
     GetWritePort () const;
 
 protected:
+
+    typedef enum
+    {
+        eFDTypeFile,        // Other FD requireing read/write
+        eFDTypeSocket,      // Socket requiring send/recv
+        eFDTypeSocketUDP    // Unconnected UDP socket requiring sendto/recvfrom
+    } FDType;
     
     void
     OpenCommandPipe ();
@@ -103,14 +110,7 @@ protected:
     NamedSocketConnect (const char *socket_name, Error *error_ptr);
     
     lldb::ConnectionStatus
-    Close (int& fd, Error *error);
-
-    typedef enum
-    {
-        eFDTypeFile,        // Other FD requireing read/write
-        eFDTypeSocket,      // Socket requiring send/recv
-        eFDTypeSocketUDP    // Unconnected UDP socket requiring sendto/recvfrom
-    } FDType;
+    Close (int& fd, FDType type, Error *error);
     
     int m_fd_send;
     int m_fd_recv;

Modified: lldb/trunk/source/Core/ConnectionFileDescriptor.cpp
URL: 
http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/ConnectionFileDescriptor.cpp?rev=191446&r1=191445&r2=191446&view=diff
==============================================================================
--- lldb/trunk/source/Core/ConnectionFileDescriptor.cpp (original)
+++ lldb/trunk/source/Core/ConnectionFileDescriptor.cpp Thu Sep 26 13:49:53 2013
@@ -398,16 +398,16 @@ ConnectionFileDescriptor::Disconnect (Er
     {
         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
 #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
             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 (
         {
             if (error_ptr)
                 error_ptr->SetErrorToErrno();
-            Close (listen_port, NULL);
+            Close (listen_port, eFDTypeSocket, NULL);
             return eConnectionStatusError;
         }
 
@@ -1310,7 +1314,7 @@ ConnectionFileDescriptor::SocketListen (
         {
             if (error_ptr)
                 error_ptr->SetErrorToErrno();
-            Close (listen_port, NULL);
+            Close (listen_port, eFDTypeSocket, NULL);
             return eConnectionStatusError;
         }
 
@@ -1319,13 +1323,13 @@ ConnectionFileDescriptor::SocketListen (
         {
             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;
 


_______________________________________________
lldb-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits

Reply via email to