summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-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;