summaryrefslogtreecommitdiff
path: root/lib/sbuffer.cpp
diff options
context:
space:
mode:
authorJosh Blum2012-09-14 09:04:37 -0700
committerJosh Blum2012-09-14 09:04:37 -0700
commitf91c377f1636afb42cadea0da5f34cef545d1ef2 (patch)
tree11460e41bdd9b4f45a5ee8b6418ec2c0db596a9f /lib/sbuffer.cpp
parent516be5f5836da2d93e4ce72945d9c0c1339a26f2 (diff)
downloadsandhi-f91c377f1636afb42cadea0da5f34cef545d1ef2.tar.gz
sandhi-f91c377f1636afb42cadea0da5f34cef545d1ef2.tar.bz2
sandhi-f91c377f1636afb42cadea0da5f34cef545d1ef2.zip
moved sbuffer deref logic into the cpp
Diffstat (limited to 'lib/sbuffer.cpp')
-rw-r--r--lib/sbuffer.cpp23
1 files changed, 23 insertions, 0 deletions
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;