[Lldb-commits] [lldb] [lldb] Guard SBFrame/SBThread methods against running processes (PR #152020)
Felipe de Azevedo Piovezan via lldb-commits
lldb-commits at lists.llvm.org
Fri Aug 8 11:26:03 PDT 2025
================
@@ -125,19 +127,48 @@ ExecutionContext::ExecutionContext(const ExecutionContextRef *exe_ctx_ref_ptr,
}
}
-ExecutionContext::ExecutionContext(const ExecutionContextRef *exe_ctx_ref_ptr,
- std::unique_lock<std::recursive_mutex> &lock)
- : m_target_sp(), m_process_sp(), m_thread_sp(), m_frame_sp() {
- if (exe_ctx_ref_ptr) {
- m_target_sp = exe_ctx_ref_ptr->GetTargetSP();
- if (m_target_sp) {
- lock = std::unique_lock<std::recursive_mutex>(m_target_sp->GetAPIMutex());
+llvm::Expected<StoppedExecutionContext>
+lldb_private::GetStoppedExecutionContext(
+ const lldb::ExecutionContextRefSP &exe_ctx_ref_ptr) {
+ return GetStoppedExecutionContext(exe_ctx_ref_ptr.get());
+}
- m_process_sp = exe_ctx_ref_ptr->GetProcessSP();
- m_thread_sp = exe_ctx_ref_ptr->GetThreadSP();
- m_frame_sp = exe_ctx_ref_ptr->GetFrameSP();
- }
- }
+llvm::Expected<StoppedExecutionContext>
+lldb_private::GetStoppedExecutionContext(
+ const ExecutionContextRef *exe_ctx_ref_ptr) {
+ if (!exe_ctx_ref_ptr)
+ return llvm::createStringError(
+ "ExecutionContext created with an empty ExecutionContextRef");
+
+ lldb::TargetSP target_sp = exe_ctx_ref_ptr->GetTargetSP();
+ if (!target_sp)
+ return llvm::createStringError(
+ "ExecutionContext created with a null target");
+
+ auto api_lock =
+ std::unique_lock<std::recursive_mutex>(target_sp->GetAPIMutex());
+
+ auto process_sp = exe_ctx_ref_ptr->GetProcessSP();
+ if (!process_sp)
+ return llvm::createStringError(
+ "ExecutionContext created with a null process");
+
+ ProcessRunLock::ProcessRunLocker stop_locker;
+ if (!stop_locker.TryLock(&process_sp->GetRunLock()))
+ return llvm::createStringError(
+ "Attempted to create an ExecutionContext with a running process");
----------------
felipepiovezan wrote:
Updated
https://github.com/llvm/llvm-project/pull/152020
More information about the lldb-commits
mailing list