Fix builds Windows and OSX builds after Connection refactor in r287922
authorPavel Labath <labath@google.com>
Fri, 25 Nov 2016 14:43:37 +0000 (14:43 +0000)
committerPavel Labath <labath@google.com>
Fri, 25 Nov 2016 14:43:37 +0000 (14:43 +0000)
Switch various bits of platform-specific code to chrono that I did not notice
when doing a linux build. This exposed a bug that ConnectionGenericFileWindows
did not handle the magic UINT32_MAX timeout value (instead it waited for about an
hour, which is close enough I guess). Fix that as well.

llvm-svn: 287927

lldb/include/lldb/Host/windows/ConnectionGenericFileWindows.h
lldb/source/Host/macosx/Host.mm
lldb/source/Host/windows/ConnectionGenericFileWindows.cpp
lldb/source/Plugins/Process/MacOSX-Kernel/CommunicationKDP.cpp

index eceecf7..4a5a385 100644 (file)
@@ -32,7 +32,7 @@ public:
 
   lldb::ConnectionStatus Disconnect(Error *error_ptr) override;
 
-  size_t Read(void *dst, size_t dst_len, uint32_t timeout_usec,
+  size_t Read(void *dst, size_t dst_len, const Timeout<std::micro> &timeout,
               lldb::ConnectionStatus &status, Error *error_ptr) override;
 
   size_t Write(const void *src, size_t src_len, lldb::ConnectionStatus &status,
index 50db9f5..6c0a44b 100644 (file)
@@ -144,8 +144,8 @@ static void *AcceptPIDFromInferior(void *arg) {
     char pid_str[256];
     ::memset(pid_str, 0, sizeof(pid_str));
     ConnectionStatus status;
-    const size_t pid_str_len =
-        file_conn.Read(pid_str, sizeof(pid_str), 0, status, NULL);
+    const size_t pid_str_len = file_conn.Read(
+        pid_str, sizeof(pid_str), std::chrono::seconds(0), status, NULL);
     if (pid_str_len > 0) {
       int pid = atoi(pid_str);
       return (void *)(intptr_t)pid;
index d13eb10..5d48a1c 100644 (file)
@@ -168,7 +168,7 @@ lldb::ConnectionStatus ConnectionGenericFile::Disconnect(Error *error_ptr) {
 }
 
 size_t ConnectionGenericFile::Read(void *dst, size_t dst_len,
-                                   uint32_t timeout_usec,
+                                   const Timeout<std::micro> &timeout,
                                    lldb::ConnectionStatus &status,
                                    Error *error_ptr) {
   ReturnInfo return_info;
@@ -191,7 +191,11 @@ size_t ConnectionGenericFile::Read(void *dst, size_t dst_len,
       // The expected return path.  The operation is pending.  Wait for the
       // operation to complete
       // or be interrupted.
-      DWORD milliseconds = timeout_usec/1000;
+      DWORD milliseconds =
+          timeout
+              ? std::chrono::duration_cast<std::chrono::milliseconds>(*timeout)
+                    .count()
+              : INFINITE;
       DWORD wait_result =
           ::WaitForMultipleObjects(llvm::array_lengthof(m_event_handles),
                                    m_event_handles, FALSE, milliseconds);
index 50f9268..43e4617 100644 (file)
@@ -210,8 +210,11 @@ size_t CommunicationKDP::WaitForPacketWithTimeoutMicroSecondsNoLock(
   bool timed_out = false;
   while (IsConnected() && !timed_out) {
     lldb::ConnectionStatus status = eConnectionStatusNoConnection;
-    size_t bytes_read =
-        Read(buffer, sizeof(buffer), timeout_usec, status, &error);
+    size_t bytes_read = Read(buffer, sizeof(buffer),
+                             timeout_usec == UINT32_MAX
+                                 ? Timeout<std::micro>(llvm::None)
+                                 : std::chrono::microseconds(timeout_usec),
+                             status, &error);
 
     if (log)
       log->Printf("%s: Read (buffer, (sizeof(buffer), timeout_usec = 0x%x, "