llvm-project/lldb/source
Greg Clayton 17a6ad05c1 Removed the "lldb-forward-rtti.h" header file as it was designed to contain
all RTTI types, and since we don't use RTTI anymore since clang and llvm don't
we don't really need this header file. All shared pointer definitions have
been moved into "lldb-forward.h".

Defined std::tr1::weak_ptr definitions for all of the types that inherit from
enable_shared_from_this() in "lldb-forward.h" in preparation for thread
hardening our public API.

The first in the thread hardening check-ins. First we start with SBThread.
We have issues in our lldb::SB API right now where if you have one object
that is being used by two threads we have a race condition. Consider the
following code:

 1    int
 2    SBThread::SomeFunction()
 3    {
 4        int result = -1;
 5        if (m_opaque_sp)
 6        {
 7            result = m_opaque_sp->DoSomething();
 8        }
 9        return result;
10    }

And now this happens:

Thread 1 enters any SBThread function and checks its m_opaque_sp and is about
to execute the code on line 7 but hasn't yet
Thread 2 gets to run and class sb_thread.Clear() which calls m_opaque_sp.clear()
and clears the contents of the shared pointer member
Thread 1 now crashes when it resumes.

The solution is to use std::tr1::weak_ptr. Now the SBThread class contains a
lldb::ThreadWP (weak pointer to our lldb_private::Thread class) and this 
function would look like:

 1    int
 2    SBThread::SomeFunction()
 3    {
 4        int result = -1;
 5        ThreadSP thread_sp(m_opaque_wp.lock());
 6        if (thread_sp)
 7        {
 8            result = m_opaque_sp->DoSomething();
 9        }
10        return result;
11    }

Now we have a solid thread safe API where we get a local copy of our thread
shared pointer from our weak_ptr and then we are guaranteed it can't go away
during our function.

So lldb::SBThread has been thread hardened, more checkins to follow shortly.

llvm-svn: 149218
2012-01-30 02:53:15 +00:00
..
API Removed the "lldb-forward-rtti.h" header file as it was designed to contain 2012-01-30 02:53:15 +00:00
Breakpoint Switching back to using std::tr1::shared_ptr. We originally switched away 2012-01-29 20:56:30 +00:00
Commands Switching back to using std::tr1::shared_ptr. We originally switched away 2012-01-29 20:56:30 +00:00
Core Switching back to using std::tr1::shared_ptr. We originally switched away 2012-01-29 20:56:30 +00:00
Expression Switching back to using std::tr1::shared_ptr. We originally switched away 2012-01-29 20:56:30 +00:00
Host Fix typo. 2012-01-27 18:53:22 +00:00
Interpreter Switching back to using std::tr1::shared_ptr. We originally switched away 2012-01-29 20:56:30 +00:00
Plugins Switching back to using std::tr1::shared_ptr. We originally switched away 2012-01-29 20:56:30 +00:00
Symbol Switching back to using std::tr1::shared_ptr. We originally switched away 2012-01-29 20:56:30 +00:00
Target Switching back to using std::tr1::shared_ptr. We originally switched away 2012-01-29 20:56:30 +00:00
Utility Added a ModuleList::Destroy() method which will reclaim the std::vector 2012-01-27 18:45:39 +00:00
Makefile Patch from Jean-Daniel Dupas: 2010-07-12 23:14:00 +00:00
lldb-log.cpp Switching back to using std::tr1::shared_ptr. We originally switched away 2012-01-29 20:56:30 +00:00
lldb.cpp This patch combines common code from Linux and FreeBSD into 2012-01-05 19:17:38 +00:00