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; _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits