summaryrefslogtreecommitdiffstats
path: root/lldb/source/Utility/SharingPtr.cpp
diff options
context:
space:
mode:
authorGreg Clayton <gclayton@apple.com>2011-09-17 06:21:20 +0000
committerGreg Clayton <gclayton@apple.com>2011-09-17 06:21:20 +0000
commit747bcb03d25144951e24d957fc667bb497c88ed9 (patch)
tree95d335a5a28374feb2cd58cf629384d25287afe5 /lldb/source/Utility/SharingPtr.cpp
parent5631ebce5e09cec5c1b6929f70847d3d2554728d (diff)
downloadbcm5719-llvm-747bcb03d25144951e24d957fc667bb497c88ed9.tar.gz
bcm5719-llvm-747bcb03d25144951e24d957fc667bb497c88ed9.zip
Convert lldb::ModuleSP to use an instrusive ref counted pointer.
We had some cases where getting the shared pointer for a module from the global module list was causing a performance issue when debugging with DWARF in .o files. Now that the module uses intrusive ref counts, we can easily convert any pointer to a shared pointer. llvm-svn: 139983
Diffstat (limited to 'lldb/source/Utility/SharingPtr.cpp')
-rw-r--r--lldb/source/Utility/SharingPtr.cpp56
1 files changed, 29 insertions, 27 deletions
diff --git a/lldb/source/Utility/SharingPtr.cpp b/lldb/source/Utility/SharingPtr.cpp
index 88c103ac9e2..3ee01285a3b 100644
--- a/lldb/source/Utility/SharingPtr.cpp
+++ b/lldb/source/Utility/SharingPtr.cpp
@@ -14,40 +14,42 @@ namespace lldb_private {
namespace imp
{
-template <class T>
-inline T
-increment(T& t)
-{
- return __sync_add_and_fetch(&t, 1);
-}
+ template <class T>
+ inline T
+ increment(T& t)
+ {
+ return __sync_add_and_fetch(&t, 1);
+ }
-template <class T>
-inline T
-decrement(T& t)
-{
- return __sync_add_and_fetch(&t, -1);
-}
+ template <class T>
+ inline T
+ decrement(T& t)
+ {
+ return __sync_add_and_fetch(&t, -1);
+ }
-shared_count::~shared_count()
-{
-}
+ shared_count::~shared_count()
+ {
+ }
-void
-shared_count::add_shared()
-{
- increment(shared_owners_);
-}
+ void
+ shared_count::add_shared()
+ {
+ increment(shared_owners_);
+ }
-void
-shared_count::release_shared()
-{
- if (decrement(shared_owners_) == -1)
+ void
+ shared_count::release_shared()
{
- on_zero_shared();
- delete this;
+ if (decrement(shared_owners_) == -1)
+ {
+ on_zero_shared();
+ delete this;
+ }
}
-}
} // imp
+
} // namespace lldb
+
OpenPOWER on IntegriCloud