[Lldb-commits] [lldb] r370002 - [ConnectionFileDescriptor] Add shutdown check in ::Write.

Jonas Devlieghere via lldb-commits lldb-commits at lists.llvm.org
Mon Aug 26 18:34:17 PDT 2019


Author: jdevlieghere
Date: Mon Aug 26 18:34:16 2019
New Revision: 370002

URL: http://llvm.org/viewvc/llvm-project?rev=370002&view=rev
Log:
[ConnectionFileDescriptor] Add shutdown check in ::Write.

The disconnect method sets the shutdown flag to true. This currently
only prevents any reads from happening, but not writes, which is
incorrect. Presumably this was just an oversight when adding
synchronization to the class. This adds the same shutdown check to the
Write method.

Over-the-shoulder reviewed by Jim!

Modified:
    lldb/trunk/source/Host/posix/ConnectionFileDescriptorPosix.cpp

Modified: lldb/trunk/source/Host/posix/ConnectionFileDescriptorPosix.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Host/posix/ConnectionFileDescriptorPosix.cpp?rev=370002&r1=370001&r2=370002&view=diff
==============================================================================
--- lldb/trunk/source/Host/posix/ConnectionFileDescriptorPosix.cpp (original)
+++ lldb/trunk/source/Host/posix/ConnectionFileDescriptorPosix.cpp Mon Aug 26 18:34:16 2019
@@ -312,9 +312,6 @@ ConnectionStatus ConnectionFileDescripto
   // descriptor.  If that's the case, then send the "q" char to the command
   // file channel so the read will wake up and the connection will then know to
   // shut down.
-
-  m_shutting_down = true;
-
   std::unique_lock<std::recursive_mutex> locker(m_mutex, std::defer_lock);
   if (!locker.try_lock()) {
     if (m_pipe.CanWrite()) {
@@ -334,6 +331,9 @@ ConnectionStatus ConnectionFileDescripto
     locker.lock();
   }
 
+  // Prevents reads and writes during shutdown.
+  m_shutting_down = true;
+
   Status error = m_read_sp->Close();
   Status error2 = m_write_sp->Close();
   if (error.Fail() || error2.Fail())
@@ -369,6 +369,8 @@ size_t ConnectionFileDescriptor::Read(vo
   }
 
   if (m_shutting_down) {
+    if (error_ptr)
+      error_ptr->SetErrorString("shutting down");
     status = eConnectionStatusError;
     return 0;
   }
@@ -473,6 +475,13 @@ size_t ConnectionFileDescriptor::Write(c
     return 0;
   }
 
+  if (m_shutting_down) {
+    if (error_ptr)
+      error_ptr->SetErrorString("shutting down");
+    status = eConnectionStatusError;
+    return 0;
+  }
+
   Status error;
 
   size_t bytes_sent = src_len;




More information about the lldb-commits mailing list