[Lldb-commits] [PATCH] D69503: [LLDB] [Windows] Don't crash if the debugged process is unable to start up

Martin Storsjö via Phabricator via lldb-commits lldb-commits at lists.llvm.org
Wed Oct 30 03:54:58 PDT 2019


mstorsjo added a comment.

Yes, this definitely is a race condition. Without any changes, I triggered this condition on arm64, but not on x86_64.

The issue is in the subclass ProcessWindows, where OnExitProcess does this:

  void ProcessWindows::OnDebuggerError(const Status &error, uint32_t type) {
    // [simplified]
    if (m_session_data->m_initial_stop_received) {
    } else {
      // If we haven't actually launched the process yet, this was an error
      // launching the process.  Set the internal error and signal the initial
      // stop event so that the DoLaunch method wakes up and returns a failure.
      m_session_data->m_launch_error = error;
      ::SetEvent(m_session_data->m_initial_stop_event);
      return;
    }
  }   
  
  void ProcessWindows::OnExitProcess(uint32_t exit_code) {
    // [irrelevant bits excluded]
  
    // 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();
  }

So `ProcessWindows::OnExitProcess` signals to `ProcessDebugger::WaitForDebuggerConnection` to proceed, and then `ProcessWindows::OnExitProcess` resets `m_session_data`, which `WaitForDebuggerConnection` starts inspecting.

What's the correct course of action here? Remove the `m_session_data.reset()` from ProcessWindows::OnExitProcess, concluding that it's up to some other class to clear `m_session_data` in this case?


Repository:
  rLLDB LLDB

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D69503/new/

https://reviews.llvm.org/D69503





More information about the lldb-commits mailing list