Fix-up r278299 for windows
authorPavel Labath <labath@google.com>
Fri, 12 Aug 2016 11:20:21 +0000 (11:20 +0000)
committerPavel Labath <labath@google.com>
Fri, 12 Aug 2016 11:20:21 +0000 (11:20 +0000)
FD_SETSIZE on windows limits the number of file descriptors, rather than their individual
magnitude (the underlying implementation uses an array rather than a bitset). This meant that the
assert in the SelectHelper was incorrect, and failing all the time. Fix that.

I am not sure whether this should be #ifdef MSVC, or #ifdef WINDOWS, but my feeling is that a
more posix-conforming implementation on windows would choose the bitset implementation, so I'm
sticking with the former.

llvm-svn: 278500

lldb/source/Utility/SelectHelper.cpp

index 7d616d5..44282d2 100644 (file)
@@ -100,6 +100,12 @@ lldb_private::Error
 SelectHelper::Select()
 {
     lldb_private::Error error;
+#ifdef _MSC_VER
+    // On windows FD_SETSIZE limits the number of file descriptors, not their numeric value.
+    lldbassert(m_fd_map.size() <= FD_SETSIZE);
+    if (m_fd_map.size() > FD_SETSIZE)
+        return lldb_private::Error("Too many file descriptors for select()");
+#endif
 
     int max_read_fd = -1;
     int max_write_fd = -1;
@@ -109,7 +115,7 @@ SelectHelper::Select()
     {
         pair.second.PrepareForSelect();
         const int fd = pair.first;
-#if !defined(__APPLE__)
+#if !defined(__APPLE__) && !defined(_MSC_VER)
         lldbassert(fd < FD_SETSIZE);
         if (fd >= FD_SETSIZE)
         {