mgorny created this revision. mgorny added reviewers: labath, krytarowski, emaste. Herald added a subscriber: arichardson. Herald added a project: All. mgorny requested review of this revision.
Do not send SIGSTOP when requested to halt a process that's already stopped. This results in the signal being queued for delivery once the process is resumed, and unexpectedly stopping it again. This fixes TestBreakpointSetRestart failure right now, and is necessary for non-stop protocol patches to land. Sponsored by: The FreeBSD Foundation https://reviews.llvm.org/D126770 Files: lldb/source/Plugins/Process/FreeBSD/NativeProcessFreeBSD.cpp Index: lldb/source/Plugins/Process/FreeBSD/NativeProcessFreeBSD.cpp =================================================================== --- lldb/source/Plugins/Process/FreeBSD/NativeProcessFreeBSD.cpp +++ lldb/source/Plugins/Process/FreeBSD/NativeProcessFreeBSD.cpp @@ -497,6 +497,10 @@ Status NativeProcessFreeBSD::Halt() { Status error; + // Do not try to stop a process that's already stopped, this may cause + // the SIGSTOP to get queued and stop the process again once resumed. + if (StateIsStoppedState(m_state, false)) + return error; if (kill(GetID(), SIGSTOP) != 0) error.SetErrorToErrno(); return error;
Index: lldb/source/Plugins/Process/FreeBSD/NativeProcessFreeBSD.cpp =================================================================== --- lldb/source/Plugins/Process/FreeBSD/NativeProcessFreeBSD.cpp +++ lldb/source/Plugins/Process/FreeBSD/NativeProcessFreeBSD.cpp @@ -497,6 +497,10 @@ Status NativeProcessFreeBSD::Halt() { Status error; + // Do not try to stop a process that's already stopped, this may cause + // the SIGSTOP to get queued and stop the process again once resumed. + if (StateIsStoppedState(m_state, false)) + return error; if (kill(GetID(), SIGSTOP) != 0) error.SetErrorToErrno(); return error;
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits