summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClayton Smith <argilo@gmail.com>2020-02-07 09:24:14 -0500
committerMarcus Müller <marcus@hostalia.de>2020-02-08 15:05:45 +0100
commit8be48325fbe18b90ccb6447e6fdb7546b98d2966 (patch)
treee69866506add1673a3760fe1fb41364f869ac6e5
parentc3333eb0d7238c82442d1d901df03d5199557213 (diff)
runtime: release the flattened flowgraph after stopping
-rw-r--r--gnuradio-runtime/lib/top_block_impl.cc2
-rw-r--r--gr-blocks/lib/qa_gr_top_block.cc30
2 files changed, 32 insertions, 0 deletions
diff --git a/gnuradio-runtime/lib/top_block_impl.cc b/gnuradio-runtime/lib/top_block_impl.cc
index 28f924b917..bfc2bf310f 100644
--- a/gnuradio-runtime/lib/top_block_impl.cc
+++ b/gnuradio-runtime/lib/top_block_impl.cc
@@ -122,6 +122,8 @@ void top_block_impl::stop()
if (d_scheduler)
d_scheduler->stop();
+ d_ffg.reset();
+
d_state = IDLE;
}
diff --git a/gr-blocks/lib/qa_gr_top_block.cc b/gr-blocks/lib/qa_gr_top_block.cc
index 76e754fc0a..6a9e0f5467 100644
--- a/gr-blocks/lib/qa_gr_top_block.cc
+++ b/gr-blocks/lib/qa_gr_top_block.cc
@@ -282,3 +282,33 @@ BOOST_AUTO_TEST_CASE(t11_set_block_affinity)
// least one thread core exists to use.
BOOST_CHECK_EQUAL(set[0], ret[0]);
}
+
+BOOST_AUTO_TEST_CASE(t12_release_shared_pointers)
+{
+ if (VERBOSE)
+ std::cout << "qa_top_block::t12()\n";
+
+ gr::top_block_sptr tb = gr::make_top_block("top");
+
+ gr::block_sptr src = gr::blocks::null_source::make(sizeof(int));
+ gr::block_sptr head = gr::blocks::head::make(sizeof(int), 100000);
+ gr::block_sptr dst = gr::blocks::null_sink::make(sizeof(int));
+
+ tb->connect(src, 0, head, 0);
+ tb->connect(head, 0, dst, 0);
+
+ tb->start();
+ tb->stop();
+ tb->wait();
+
+ BOOST_CHECK(src.use_count() > 1);
+ BOOST_CHECK(head.use_count() > 1);
+ BOOST_CHECK(dst.use_count() > 1);
+
+ tb->disconnect(src, 0, head, 0);
+ tb->disconnect(head, 0, dst, 0);
+
+ BOOST_CHECK_EQUAL(1, src.use_count());
+ BOOST_CHECK_EQUAL(1, head.use_count());
+ BOOST_CHECK_EQUAL(1, dst.use_count());
+}