summaryrefslogtreecommitdiffstats
path: root/lldb/source/Plugins/Process/Windows/Common/ProcessWindows.cpp
diff options
context:
space:
mode:
authorMartin Storsjö <martin@martin.st>2019-10-28 10:28:26 +0200
committerMartin Storsjö <martin@martin.st>2019-10-31 11:26:20 +0200
commit403cd574b6d9fbdae1b39fe9d2576b02c7139486 (patch)
tree483a5a1092f0179136dbc6476999428621d034ca /lldb/source/Plugins/Process/Windows/Common/ProcessWindows.cpp
parent3db1d138b1172b5855f35ab74dbf3bf327f517d2 (diff)
downloadbcm5719-llvm-403cd574b6d9fbdae1b39fe9d2576b02c7139486.tar.gz
bcm5719-llvm-403cd574b6d9fbdae1b39fe9d2576b02c7139486.zip
[LLDB] [Windows] Fix Windows-specific race condition in LLDB for session lifetime
This can e.g. happen if the debugged executable exits before the initial stop, e.g. if it fails to load dependent DLLs. Add a virtual destructor to ProcessDebugger and let it clean up the session, and make ProcessWindows::OnExitProcess call ProcessDebugger::OnExitProcess for shared parts. Fix suggestion by Adrian McCarthy. Differential Revision: https://reviews.llvm.org/D69503
Diffstat (limited to 'lldb/source/Plugins/Process/Windows/Common/ProcessWindows.cpp')
-rw-r--r--lldb/source/Plugins/Process/Windows/Common/ProcessWindows.cpp11
1 files changed, 1 insertions, 10 deletions
diff --git a/lldb/source/Plugins/Process/Windows/Common/ProcessWindows.cpp b/lldb/source/Plugins/Process/Windows/Common/ProcessWindows.cpp
index c4b7a6d1a90..d4e60ec2b43 100644
--- a/lldb/source/Plugins/Process/Windows/Common/ProcessWindows.cpp
+++ b/lldb/source/Plugins/Process/Windows/Common/ProcessWindows.cpp
@@ -625,16 +625,7 @@ void ProcessWindows::OnExitProcess(uint32_t exit_code) {
SetProcessExitStatus(GetID(), true, 0, exit_code);
SetPrivateState(eStateExited);
- // If the process exits before any initial stop then notify the debugger
- // of the error otherwise WaitForDebuggerConnection() will be blocked.
- // An example of this issue is when a process fails to load a dependent DLL.
- if (m_session_data && !m_session_data->m_initial_stop_received) {
- Status error(exit_code, eErrorTypeWin32);
- OnDebuggerError(error, 0);
- }
-
- // Reset the session.
- m_session_data.reset();
+ ProcessDebugger::OnExitProcess(exit_code);
}
void ProcessWindows::OnDebuggerConnected(lldb::addr_t image_base) {
OpenPOWER on IntegriCloud