diff options
author | Josh Blum | 2012-09-14 09:04:37 -0700 |
---|---|---|
committer | Josh Blum | 2012-09-14 09:04:37 -0700 |
commit | f91c377f1636afb42cadea0da5f34cef545d1ef2 (patch) | |
tree | 11460e41bdd9b4f45a5ee8b6418ec2c0db596a9f | |
parent | 516be5f5836da2d93e4ce72945d9c0c1339a26f2 (diff) | |
download | sandhi-f91c377f1636afb42cadea0da5f34cef545d1ef2.tar.gz sandhi-f91c377f1636afb42cadea0da5f34cef545d1ef2.tar.bz2 sandhi-f91c377f1636afb42cadea0da5f34cef545d1ef2.zip |
moved sbuffer deref logic into the cpp
-rw-r--r-- | include/gnuradio/sbuffer.ipp | 23 | ||||
-rw-r--r-- | lib/sbuffer.cpp | 23 |
2 files changed, 27 insertions, 19 deletions
diff --git a/include/gnuradio/sbuffer.ipp b/include/gnuradio/sbuffer.ipp index fa7d0cc..e4ad62a 100644 --- a/include/gnuradio/sbuffer.ipp +++ b/include/gnuradio/sbuffer.ipp @@ -36,6 +36,9 @@ struct SBufferImpl SBufferConfig config; }; + +extern GRAS_API void sbuffer_handle_deref(SBufferImpl *impl); + inline void intrusive_ptr_add_ref(SBufferImpl *impl) { ++impl->count; @@ -45,25 +48,7 @@ inline void intrusive_ptr_release(SBufferImpl *impl) { if (--impl->count == 0) { - //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 - } + sbuffer_handle_deref(impl); } } diff --git a/lib/sbuffer.cpp b/lib/sbuffer.cpp index eea323b..31e3943 100644 --- a/lib/sbuffer.cpp +++ b/lib/sbuffer.cpp @@ -20,6 +20,29 @@ using namespace gnuradio; +void gnuradio::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; |