[lldb/Plugins] Fix ScriptedThread IndexID reporting
When listing all the Scripted Threads of a ScriptedProcess, we can see that all have the thread index set to 1. This is caused by the lldb_private::Thread constructor, which sets the m_index_id member using the provided thread id `tid`. Because the call to the super constructor is done before instantiating the `ScriptedThreadInterface`, lldb can't fetch the thread id from the script instance, so it uses `LLDB_INVALID_THREAD_ID` instead. To mitigate this, this patch takes advantage of the `ScriptedThread::Create` fallible constructor idiom to defer calling the `ScriptedThread` constructor (and the `Thread` super constructor with it), until we can fetch a valid thread id `tid` from the `ScriptedThreadInterface`. rdar://87432065 Differential Revision: https://reviews.llvm.org/D117076 Signed-off-by: Med Ismail Bennani <medismail.bennani@gmail.com>
This commit is contained in:
@@ -328,12 +328,14 @@ bool ScriptedProcess::DoUpdateThreadList(ThreadList &old_thread_list,
|
||||
return true;
|
||||
}
|
||||
|
||||
lldb::ThreadSP thread_sp =
|
||||
std::make_shared<ScriptedThread>(*this, error, val->GetAsGeneric());
|
||||
auto thread_or_error = ScriptedThread::Create(*this, val->GetAsGeneric());
|
||||
|
||||
if (!thread_sp || error.Fail())
|
||||
return GetInterface().ErrorWithMessage<bool>(LLVM_PRETTY_FUNCTION,
|
||||
error.AsCString(), error);
|
||||
if (!thread_or_error)
|
||||
return GetInterface().ErrorWithMessage<bool>(
|
||||
LLVM_PRETTY_FUNCTION, toString(thread_or_error.takeError()), error);
|
||||
|
||||
ThreadSP thread_sp = thread_or_error.get();
|
||||
lldbassert(thread_sp && "Couldn't initialize scripted thread.");
|
||||
|
||||
RegisterContextSP reg_ctx_sp = thread_sp->GetRegisterContext();
|
||||
if (!reg_ctx_sp)
|
||||
|
||||
Reference in New Issue
Block a user