diff --git a/lldb/include/lldb/Utility/ReproducerInstrumentation.h b/lldb/include/lldb/Utility/ReproducerInstrumentation.h --- a/lldb/include/lldb/Utility/ReproducerInstrumentation.h +++ b/lldb/include/lldb/Utility/ReproducerInstrumentation.h @@ -841,6 +841,10 @@ bool ShouldCapture() { return m_local_boundary; } + /// Mark the current thread as a private thread and pretend that everything + /// on this thread is behind happening behind the API boundary. + static void PrivateThread() { g_global_boundary = true; } + private: template friend struct replay; void UpdateBoundary() { @@ -868,7 +872,7 @@ bool m_result_recorded; /// Whether we're currently across the API boundary. - static bool g_global_boundary; + static thread_local bool g_global_boundary; }; /// To be used as the "Runtime ID" of a constructor. It also invokes the diff --git a/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp b/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp --- a/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp +++ b/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp @@ -33,6 +33,7 @@ #include "lldb/Interpreter/CommandReturnObject.h" #include "lldb/Target/Thread.h" #include "lldb/Target/ThreadPlan.h" +#include "lldb/Utility/ReproducerInstrumentation.h" #include "lldb/Utility/Timer.h" #include "llvm/ADT/STLExtras.h" #include "llvm/ADT/StringRef.h" @@ -437,6 +438,7 @@ : ScriptInterpreterLocker(), m_teardown_session((on_leave & TearDownSession) == TearDownSession), m_python_interpreter(py_interpreter) { + repro::Recorder::PrivateThread(); DoAcquireLock(); if ((on_entry & InitSession) == InitSession) { if (!DoInitSession(on_entry, in, out, err)) { diff --git a/lldb/source/Utility/ReproducerInstrumentation.cpp b/lldb/source/Utility/ReproducerInstrumentation.cpp --- a/lldb/source/Utility/ReproducerInstrumentation.cpp +++ b/lldb/source/Utility/ReproducerInstrumentation.cpp @@ -227,4 +227,4 @@ return g_instrumentation_data; } -bool lldb_private::repro::Recorder::g_global_boundary; +thread_local bool lldb_private::repro::Recorder::g_global_boundary = false;