diff options
-rw-r--r-- | gnuradio-runtime/lib/top_block_impl.cc | 2 | ||||
-rw-r--r-- | gr-blocks/lib/qa_gr_top_block.cc | 30 |
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()); +} |