Revision tags: llvmorg-18.1.8, llvmorg-18.1.7, llvmorg-18.1.6, llvmorg-18.1.5, llvmorg-18.1.4, llvmorg-18.1.3, llvmorg-18.1.2, llvmorg-18.1.1, llvmorg-18.1.0, llvmorg-18.1.0-rc4, llvmorg-18.1.0-rc3, llvmorg-18.1.0-rc2, llvmorg-18.1.0-rc1, llvmorg-19-init, llvmorg-17.0.6, llvmorg-17.0.5, llvmorg-17.0.4, llvmorg-17.0.3, llvmorg-17.0.2, llvmorg-17.0.1, llvmorg-17.0.0, llvmorg-17.0.0-rc4, llvmorg-17.0.0-rc3, llvmorg-17.0.0-rc2, llvmorg-17.0.0-rc1, llvmorg-18-init, llvmorg-16.0.6, llvmorg-16.0.5, llvmorg-16.0.4, llvmorg-16.0.3, llvmorg-16.0.2, llvmorg-16.0.1, llvmorg-16.0.0, llvmorg-16.0.0-rc4 |
|
#
f009241a |
| 09-Mar-2023 |
Jonas Devlieghere <jonas@devlieghere.com> |
[lldb] Fix -Wdangling-else warning in CommunicationTest
Fixed warning: suggest explicit braces to avoid ambiguous ‘else’ [-Wdangling-else]
|
Revision tags: llvmorg-16.0.0-rc3, llvmorg-16.0.0-rc2, llvmorg-16.0.0-rc1, llvmorg-17-init, llvmorg-15.0.7, llvmorg-15.0.6, llvmorg-15.0.5, llvmorg-15.0.4, llvmorg-15.0.3, working, llvmorg-15.0.2, llvmorg-15.0.1, llvmorg-15.0.0 |
|
#
9823d425 |
| 03-Sep-2022 |
Michał Górny <mgorny@moritz.systems> |
[lldb] [Core] Split read thread support into ThreadedCommunication
Split the read thread support from Communication into a dedicated ThreadedCommunication subclass. The read thread support is used
[lldb] [Core] Split read thread support into ThreadedCommunication
Split the read thread support from Communication into a dedicated ThreadedCommunication subclass. The read thread support is used only by a subset of Communication consumers, and it adds a lot of complexity to the base class. Furthermore, having a dedicated subclass makes it clear whether a particular consumer needs to account for the possibility of read thread being running or not.
The modules currently calling `StartReadThread()` are updated to use `ThreadedCommunication`. The remaining modules use the simplified `Communication` class.
`SBCommunication` is changed to use `ThreadedCommunication` in order to avoid changing the public API.
`CommunicationKDP` is updated in order to (hopefully) compile with the new code. However, I do not have a Darwin box to test it, so I've limited the changes to the bare minimum.
`GDBRemoteCommunication` is updated to become a `Broadcaster` directly. Since it does not inherit from `ThreadedCommunication`, its event support no longer collides with the one used for read thread and can be implemented cleanly. The support for `eBroadcastBitReadThreadDidExit` is removed from the code -- since the read thread was not used, this event was never reported.
Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.llvm.org/D133251
show more ...
|
Revision tags: llvmorg-15.0.0-rc3 |
|
#
39e0a87c |
| 23-Aug-2022 |
Michał Górny <mgorny@moritz.systems> |
[lldb] [Core] Pass error/status from Communication::ReadThread()
Ensure that the ConnectionStatus and Status from Communication::ReadThread() is correctly passed to ::Read() in order to fix further
[lldb] [Core] Pass error/status from Communication::ReadThread()
Ensure that the ConnectionStatus and Status from Communication::ReadThread() is correctly passed to ::Read() in order to fix further discrepancies between ::Read() calls in non-threaded and threaded modes.
Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.llvm.org/D132577
show more ...
|
#
59656c04 |
| 24-Aug-2022 |
Pavel Labath <pavel@labath.sk> |
[lldb] Make CommunicationTest compatible with windows
Our (TCP) socket support is in a much better state than pipes. Use that for testing the Communication class.
Move the CreateTCPConnectedSockets
[lldb] Make CommunicationTest compatible with windows
Our (TCP) socket support is in a much better state than pipes. Use that for testing the Communication class.
Move the CreateTCPConnectedSockets function (SocketTestUtilities.{h,cpp}) to a place where it can be used from Communication tests.
show more ...
|
#
d92f49fc |
| 19-Aug-2022 |
Michał Górny <mgorny@moritz.systems> |
Reland "[lldb] [test] Disable new CommunicationTests on Windows"
This change was wrongly reverted and re-broke the Windows buildbot.
Sponsored by: The FreeBSD Foundation
|
#
00c48525 |
| 19-Aug-2022 |
Adrian Prantl <aprantl@apple.com> |
Revert "[lldb] [test] Disable new CommunicationTests on Windows"
This reverts commit d38985a36be8b0165787f8893b3d2b0f831d1e83. because I'm also reverting D131758.
|
#
d38985a3 |
| 19-Aug-2022 |
Michał Górny <mgorny@moritz.systems> |
[lldb] [test] Disable new CommunicationTests on Windows
Sponsored by: The FreeBSD Foundation
|
#
d6e1e01d |
| 19-Aug-2022 |
Michał Górny <mgorny@moritz.systems> |
[lldb] [Core] Harmonize Communication::Read() returns w/ thread
Harmonize the status and error values of Communication::Read() when running with and without read thread. Prior to this change, Read(
[lldb] [Core] Harmonize Communication::Read() returns w/ thread
Harmonize the status and error values of Communication::Read() when running with and without read thread. Prior to this change, Read() would return eConnectionStatusSuccess if read thread was enabled and the read timed out or reached end-of-file, rather than the respective states that are returned if read thread was disabled. Now, it correctly returns eConnectionStatusTimedOut and eConnectionStatusEndOfFile, and sets the error respectively.
Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.llvm.org/D132217
show more ...
|
Revision tags: llvmorg-15.0.0-rc2, llvmorg-15.0.0-rc1, llvmorg-16-init, llvmorg-14.0.6, llvmorg-14.0.5, llvmorg-14.0.4, llvmorg-14.0.3, llvmorg-14.0.2, llvmorg-14.0.1, llvmorg-14.0.0, llvmorg-14.0.0-rc4, llvmorg-14.0.0-rc3, llvmorg-14.0.0-rc2, llvmorg-14.0.0-rc1, llvmorg-15-init, llvmorg-13.0.1, llvmorg-13.0.1-rc3 |
|
#
04f13da6 |
| 18-Jan-2022 |
Pavel Labath <pavel@labath.sk> |
[lldb] Fix compiler warning in CommunicationTest
"0x80 changes value when converted to char"
|
Revision tags: llvmorg-13.0.1-rc2, llvmorg-13.0.1-rc1 |
|
#
f279e50f |
| 20-Oct-2021 |
Michał Górny <mgorny@moritz.systems> |
[lldb] [Communication] Add a WriteAll() method that resumes writing
Add a Communication::WriteAll() that resumes Write() if the initial call did not write all data. Use it in GDBRemoteCommunication
[lldb] [Communication] Add a WriteAll() method that resumes writing
Add a Communication::WriteAll() that resumes Write() if the initial call did not write all data. Use it in GDBRemoteCommunication when sending packets in order to fix handling partial writes (i.e. just resume/retry them rather than erring out). This fixes LLDB failures when writing large packets to a pty.
Differential Revision: https://reviews.llvm.org/D112169
show more ...
|
Revision tags: llvmorg-13.0.0, llvmorg-13.0.0-rc4, llvmorg-13.0.0-rc3, llvmorg-13.0.0-rc2, llvmorg-13.0.0-rc1, llvmorg-14-init, llvmorg-12.0.1, llvmorg-12.0.1-rc4, llvmorg-12.0.1-rc3, llvmorg-12.0.1-rc2, llvmorg-12.0.1-rc1, llvmorg-12.0.0, llvmorg-12.0.0-rc5, llvmorg-12.0.0-rc4, llvmorg-12.0.0-rc3, llvmorg-12.0.0-rc2, llvmorg-11.1.0, llvmorg-11.1.0-rc3, llvmorg-12.0.0-rc1, llvmorg-13-init, llvmorg-11.1.0-rc2, llvmorg-11.1.0-rc1, llvmorg-11.0.1, llvmorg-11.0.1-rc2, llvmorg-11.0.1-rc1, llvmorg-11.0.0, llvmorg-11.0.0-rc6, llvmorg-11.0.0-rc5, llvmorg-11.0.0-rc4, llvmorg-11.0.0-rc3, llvmorg-11.0.0-rc2, llvmorg-11.0.0-rc1, llvmorg-12-init, llvmorg-10.0.1, llvmorg-10.0.1-rc4, llvmorg-10.0.1-rc3, llvmorg-10.0.1-rc2, llvmorg-10.0.1-rc1 |
|
#
9aa5fbb3 |
| 09-Apr-2020 |
Pavel Labath <pavel@labath.sk> |
[lldb] Disable the new Communication test on windows
The ConnectionFileDescriptor class on windows does not support interruption (see the BytesAvailable method). Therefore this test makes no sense t
[lldb] Disable the new Communication test on windows
The ConnectionFileDescriptor class on windows does not support interruption (see the BytesAvailable method). Therefore this test makes no sense there.
show more ...
|
#
769d7041 |
| 02-Apr-2020 |
Pavel Labath <pavel@labath.sk> |
Recommit "[lldb/Core] Fix a race in the Communication class"
The synchronization logic in the previous had a subtle bug. Moving of the "m_read_thread_did_exit = true" into the critical section made
Recommit "[lldb/Core] Fix a race in the Communication class"
The synchronization logic in the previous had a subtle bug. Moving of the "m_read_thread_did_exit = true" into the critical section made it possible for some threads calling SynchronizeWithReadThread call to get stuck. This could happen if there were already past the point where they checked this variable. In that case, they would block on waiting for the eBroadcastBitNoMorePendingInput event, which would never come as the read thread was blocked on getting the synchronization mutex.
The new version moves that line out of the critical section and before the sending of the eBroadcastBitNoMorePendingInput event, and also adds some comments to explain why the things need to be in this sequence: - m_read_thread_did_exit = true: prevents new threads for waiting on events - eBroadcastBitNoMorePendingInput: unblock any current thread waiting for the event - Disconnect(): close the connection. This is the only bit that needs to be in the critical section, and this is to ensure that we don't close the connection while the synchronizing thread is mucking with it.
Original commit message follows:
Communication::SynchronizeWithReadThread is called whenever a process stops to ensure that we process all of its stdout before we report the stop. If the process exits, we first call this method, and then close the connection.
However, when the child process exits, the thread reading its stdout will usually (but not always) read an EOF because the other end of the pty has been closed. In response to an EOF, the Communication read thread closes it's end of the connection too.
This can result in a race where the read thread is closing the connection while the synchronizing thread is attempting to get its attention via Connection::InterruptRead.
The fix is to hold the synchronization mutex while closing the connection.
I've found this issue while tracking down a rare flake in some of the vscode tests. I am not sure this is the cause of those failures (as I would have expected this issue to manifest itself differently), but it is an issue nonetheless.
The attached test demonstrates the steps needed to reproduce the race. It will fail under tsan without this patch.
Reviewers: clayborg, JDevlieghere
Subscribers: mgorny, lldb-commits
Tags: #lldb
Differential Revision: https://reviews.llvm.org/D77295
show more ...
|
#
ebb07134 |
| 02-Apr-2020 |
Pavel Labath <pavel@labath.sk> |
[lldb/Core] Fix a race in the Communication class
Summary: Communication::SynchronizeWithReadThread is called whenever a process stops to ensure that we process all of its stdout before we report th
[lldb/Core] Fix a race in the Communication class
Summary: Communication::SynchronizeWithReadThread is called whenever a process stops to ensure that we process all of its stdout before we report the stop. If the process exits, we first call this method, and then close the connection.
However, when the child process exits, the thread reading its stdout will usually (but not always) read an EOF because the other end of the pty has been closed. In response to an EOF, the Communication read thread closes it's end of the connection too.
This can result in a race where the read thread is closing the connection while the synchronizing thread is attempting to get its attention via Connection::InterruptRead.
The fix is to hold the synchronization mutex while closing the connection.
I've found this issue while tracking down a rare flake in some of the vscode tests. I am not sure this is the cause of those failures (as I would have expected this issue to manifest itself differently), but it is an issue nonetheless.
The attached test demonstrates the steps needed to reproduce the race. It will fail under tsan without this patch.
Reviewers: clayborg, JDevlieghere
Subscribers: mgorny, lldb-commits
Tags: #lldb
Differential Revision: https://reviews.llvm.org/D77295
show more ...
|