Author: Adrian Prantl Date: 2020-08-17T14:42:25-07:00 New Revision: 8bb81c29b980d7fe37527d82cdae14f7f94727b1
URL: https://github.com/llvm/llvm-project/commit/8bb81c29b980d7fe37527d82cdae14f7f94727b1 DIFF: https://github.com/llvm/llvm-project/commit/8bb81c29b980d7fe37527d82cdae14f7f94727b1.diff LOG: Convert to early exit (NFC) Added: Modified: lldb/source/Target/Target.cpp Removed: ################################################################################ diff --git a/lldb/source/Target/Target.cpp b/lldb/source/Target/Target.cpp index a3ec621e7141..201a146440e1 100644 --- a/lldb/source/Target/Target.cpp +++ b/lldb/source/Target/Target.cpp @@ -2902,68 +2902,70 @@ Status Target::Launch(ProcessLaunchInfo &launch_info, Stream *stream) { if (!error.Success()) return error; - if (synchronous_execution || - !launch_info.GetFlags().Test(eLaunchFlagStopAtEntry)) { - ListenerSP hijack_listener_sp(launch_info.GetHijackListener()); - if (!hijack_listener_sp) { - hijack_listener_sp = Listener::MakeListener("lldb.Target.Launch.hijack"); - launch_info.SetHijackListener(hijack_listener_sp); - m_process_sp->HijackProcessEvents(hijack_listener_sp); - } + auto at_exit = + llvm::make_scope_exit([&]() { m_process_sp->RestoreProcessEvents(); }); - StateType state = m_process_sp->WaitForProcessToStop( - llvm::None, nullptr, false, hijack_listener_sp, nullptr); - - if (state == eStateStopped) { - if (!launch_info.GetFlags().Test(eLaunchFlagStopAtEntry)) { - if (synchronous_execution) { - // Now we have handled the stop-from-attach, and we are just - // switching to a synchronous resume. So we should switch to the - // SyncResume hijacker. - m_process_sp->RestoreProcessEvents(); - m_process_sp->ResumeSynchronous(stream); - } else { - m_process_sp->RestoreProcessEvents(); - error = m_process_sp->PrivateResume(); - } - if (!error.Success()) { - Status error2; - error2.SetErrorStringWithFormat( - "process resume at entry point failed: %s", error.AsCString()); - error = error2; - } + if (!synchronous_execution && + launch_info.GetFlags().Test(eLaunchFlagStopAtEntry)) + return error; + + ListenerSP hijack_listener_sp(launch_info.GetHijackListener()); + if (!hijack_listener_sp) { + hijack_listener_sp = Listener::MakeListener("lldb.Target.Launch.hijack"); + launch_info.SetHijackListener(hijack_listener_sp); + m_process_sp->HijackProcessEvents(hijack_listener_sp); + } + + state = m_process_sp->WaitForProcessToStop(llvm::None, nullptr, false, + hijack_listener_sp, nullptr); + + if (state == eStateStopped) { + if (!launch_info.GetFlags().Test(eLaunchFlagStopAtEntry)) { + if (synchronous_execution) { + // Now we have handled the stop-from-attach, and we are just + // switching to a synchronous resume. So we should switch to the + // SyncResume hijacker. + m_process_sp->RestoreProcessEvents(); + m_process_sp->ResumeSynchronous(stream); + } else { + m_process_sp->RestoreProcessEvents(); + error = m_process_sp->PrivateResume(); } - } else if (state == eStateExited) { - bool with_shell = !!launch_info.GetShell(); - const int exit_status = m_process_sp->GetExitStatus(); - const char *exit_desc = m_process_sp->GetExitDescription(); + if (!error.Success()) { + Status error2; + error2.SetErrorStringWithFormat( + "process resume at entry point failed: %s", error.AsCString()); + error = error2; + } + } + } else if (state == eStateExited) { + bool with_shell = !!launch_info.GetShell(); + const int exit_status = m_process_sp->GetExitStatus(); + const char *exit_desc = m_process_sp->GetExitDescription(); #define LAUNCH_SHELL_MESSAGE \ "\n'r' and 'run' are aliases that default to launching through a " \ "shell.\nTry launching without going through a shell by using 'process " \ "launch'." - if (exit_desc && exit_desc[0]) { - if (with_shell) - error.SetErrorStringWithFormat( - "process exited with status %i (%s)" LAUNCH_SHELL_MESSAGE, - exit_status, exit_desc); - else - error.SetErrorStringWithFormat("process exited with status %i (%s)", - exit_status, exit_desc); - } else { - if (with_shell) - error.SetErrorStringWithFormat( - "process exited with status %i" LAUNCH_SHELL_MESSAGE, - exit_status); - else - error.SetErrorStringWithFormat("process exited with status %i", - exit_status); - } - } else { + if (exit_desc && exit_desc[0]) { + if (with_shell) error.SetErrorStringWithFormat( - "initial process state wasn't stopped: %s", StateAsCString(state)); - } + "process exited with status %i (%s)" LAUNCH_SHELL_MESSAGE, + exit_status, exit_desc); + else + error.SetErrorStringWithFormat("process exited with status %i (%s)", + exit_status, exit_desc); + } else { + if (with_shell) + error.SetErrorStringWithFormat( + "process exited with status %i" LAUNCH_SHELL_MESSAGE, exit_status); + else + error.SetErrorStringWithFormat("process exited with status %i", + exit_status); + } + } else { + error.SetErrorStringWithFormat("initial process state wasn't stopped: %s", + StateAsCString(state)); } - m_process_sp->RestoreProcessEvents(); return error; } _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits