Author: jingham Date: Fri Jun 10 12:22:26 2016 New Revision: 272407 URL: http://llvm.org/viewvc/llvm-project?rev=272407&view=rev Log: SBThread also had some places where it got the ExecutionContext w/o taking the API lock.
Modified: lldb/trunk/source/API/SBThread.cpp Modified: lldb/trunk/source/API/SBThread.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/API/SBThread.cpp?rev=272407&r1=272406&r2=272407&view=diff ============================================================================== --- lldb/trunk/source/API/SBThread.cpp (original) +++ lldb/trunk/source/API/SBThread.cpp Fri Jun 10 12:22:26 2016 @@ -325,7 +325,9 @@ SBThread::GetStopReasonExtendedInfoAsJSO { Stream &strm = stream.ref(); - ExecutionContext exe_ctx (m_opaque_sp.get()); + std::unique_lock<std::recursive_mutex> lock; + ExecutionContext exe_ctx(m_opaque_sp.get(), lock); + if (! exe_ctx.HasThreadScope()) return false; @@ -350,7 +352,9 @@ SBThread::GetStopReasonExtendedBacktrace if (type != eInstrumentationRuntimeTypeThreadSanitizer) return threads; - ExecutionContext exe_ctx (m_opaque_sp.get()); + std::unique_lock<std::recursive_mutex> lock; + ExecutionContext exe_ctx(m_opaque_sp.get(), lock); + if (! exe_ctx.HasThreadScope()) return threads; @@ -1250,7 +1254,9 @@ bool SBThread::Suspend() { Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); - ExecutionContext exe_ctx (m_opaque_sp.get()); + std::unique_lock<std::recursive_mutex> lock; + ExecutionContext exe_ctx(m_opaque_sp.get(), lock); + bool result = false; if (exe_ctx.HasThreadScope()) { @@ -1277,7 +1283,9 @@ bool SBThread::Resume () { Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); - ExecutionContext exe_ctx (m_opaque_sp.get()); + std::unique_lock<std::recursive_mutex> lock; + ExecutionContext exe_ctx(m_opaque_sp.get(), lock); + bool result = false; if (exe_ctx.HasThreadScope()) { @@ -1304,7 +1312,9 @@ SBThread::Resume () bool SBThread::IsSuspended() { - ExecutionContext exe_ctx (m_opaque_sp.get()); + std::unique_lock<std::recursive_mutex> lock; + ExecutionContext exe_ctx(m_opaque_sp.get(), lock); + if (exe_ctx.HasThreadScope()) return exe_ctx.GetThreadPtr()->GetResumeState () == eStateSuspended; return false; @@ -1313,7 +1323,9 @@ SBThread::IsSuspended() bool SBThread::IsStopped() { - ExecutionContext exe_ctx (m_opaque_sp.get()); + std::unique_lock<std::recursive_mutex> lock; + ExecutionContext exe_ctx(m_opaque_sp.get(), lock); + if (exe_ctx.HasThreadScope()) return StateIsStoppedState(exe_ctx.GetThreadPtr()->GetState(), true); return false; @@ -1323,7 +1335,9 @@ SBProcess SBThread::GetProcess () { SBProcess sb_process; - ExecutionContext exe_ctx (m_opaque_sp.get()); + std::unique_lock<std::recursive_mutex> lock; + ExecutionContext exe_ctx(m_opaque_sp.get(), lock); + if (exe_ctx.HasThreadScope()) { // Have to go up to the target so we can get a shared pointer to our process... @@ -1532,7 +1546,9 @@ SBThread::GetStatus (SBStream &status) c { Stream &strm = status.ref(); - ExecutionContext exe_ctx (m_opaque_sp.get()); + std::unique_lock<std::recursive_mutex> lock; + ExecutionContext exe_ctx(m_opaque_sp.get(), lock); + if (exe_ctx.HasThreadScope()) { exe_ctx.GetThreadPtr()->GetStatus(strm, 0, 1, 1); @@ -1548,7 +1564,9 @@ SBThread::GetDescription (SBStream &desc { Stream &strm = description.ref(); - ExecutionContext exe_ctx (m_opaque_sp.get()); + std::unique_lock<std::recursive_mutex> lock; + ExecutionContext exe_ctx(m_opaque_sp.get(), lock); + if (exe_ctx.HasThreadScope()) { exe_ctx.GetThreadPtr()->DumpUsingSettingsFormat(strm, LLDB_INVALID_THREAD_ID); _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits