summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosh Blum2013-05-02 23:43:02 -0700
committerJosh Blum2013-05-02 23:43:02 -0700
commitf87d54cad2e914ce244c72da790579f8fda504fa (patch)
treeedef4ee71ecd97869ed9037308582366f12a6311
parentdf99c278c77fcf6ef9d52585c1c746a366167fb8 (diff)
parent540a314a00b747c293f81d7931c22252a861fcdd (diff)
downloadsandhi-f87d54cad2e914ce244c72da790579f8fda504fa.tar.gz
sandhi-f87d54cad2e914ce244c72da790579f8fda504fa.tar.bz2
sandhi-f87d54cad2e914ce244c72da790579f8fda504fa.zip
Merge branch 'master' into theron6_work
m---------PMC0
m---------gnuradio0
m---------grextras0
-rw-r--r--include/gras/detail/sbuffer.hpp24
-rw-r--r--lib/sbuffer.cpp23
5 files changed, 19 insertions, 28 deletions
diff --git a/PMC b/PMC
-Subproject 5624c0ab79dd53c51879070b86b833f315a2f38
+Subproject 6b444922db565cd64b39729a8129eac7c81fe0c
diff --git a/gnuradio b/gnuradio
-Subproject 589915f97bba8499715bc61d2dec64b6fd7bca2
+Subproject 14502c92752098e773187890b89db8c763a1ecd
diff --git a/grextras b/grextras
-Subproject 04671348be0c359c763a828e9be734fc204cbb6
+Subproject 07fbc5681cc4dcd2813ff7a1ef8fd1632085964
diff --git a/include/gras/detail/sbuffer.hpp b/include/gras/detail/sbuffer.hpp
index 0d68ebc..720c8db 100644
--- a/include/gras/detail/sbuffer.hpp
+++ b/include/gras/detail/sbuffer.hpp
@@ -21,9 +21,6 @@ struct SBufferImpl
SBufferConfig config;
};
-
-extern GRAS_API void sbuffer_handle_deref(SBufferImpl *impl);
-
GRAS_FORCE_INLINE void intrusive_ptr_add_ref(SBufferImpl *impl)
{
++impl->count;
@@ -31,9 +28,26 @@ GRAS_FORCE_INLINE void intrusive_ptr_add_ref(SBufferImpl *impl)
GRAS_FORCE_INLINE void intrusive_ptr_release(SBufferImpl *impl)
{
- if (--impl->count == 0)
+ if GRAS_LIKELY(--impl->count) return;
+
+ //call the deleter if possible
+ boost::shared_ptr<SBufferDeleter> token_deleter = impl->config.token.lock();
+ if GRAS_LIKELY(token_deleter)
+ {
+ SBuffer buff;
+ buff.reset(impl);
+ (*token_deleter)(buff);
+ }
+ else if (impl->config.deleter)
+ {
+ SBuffer buff;
+ buff.reset(impl);
+ impl->config.deleter(buff);
+ impl->config.deleter = SBufferDeleter(); //reset deleter, so we dont double delete
+ }
+ else
{
- sbuffer_handle_deref(impl);
+ delete impl; //its really dead now
}
}
diff --git a/lib/sbuffer.cpp b/lib/sbuffer.cpp
index 03f87b1..40bbc3f 100644
--- a/lib/sbuffer.cpp
+++ b/lib/sbuffer.cpp
@@ -6,29 +6,6 @@
using namespace gras;
-void gras::sbuffer_handle_deref(SBufferImpl *impl)
-{
- //call the deleter if possible
- boost::shared_ptr<SBufferDeleter> token_deleter = impl->config.token.lock();
- if (token_deleter)
- {
- SBuffer buff;
- buff.reset(impl);
- (*token_deleter)(buff);
- }
- else if (impl->config.deleter)
- {
- SBuffer buff;
- buff.reset(impl);
- impl->config.deleter(buff);
- impl->config.deleter = SBufferDeleter(); //reset deleter, so we dont double delete
- }
- else
- {
- delete impl; //its really dead now
- }
-}
-
SBufferConfig::SBufferConfig(void)
{
memory = NULL;