summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gnuradio-runtime/include/gnuradio/block.h6
-rw-r--r--gnuradio-runtime/lib/block.cc17
2 files changed, 13 insertions, 10 deletions
diff --git a/gnuradio-runtime/include/gnuradio/block.h b/gnuradio-runtime/include/gnuradio/block.h
index 473b94c155..eac8845448 100644
--- a/gnuradio-runtime/include/gnuradio/block.h
+++ b/gnuradio-runtime/include/gnuradio/block.h
@@ -684,6 +684,8 @@ namespace gr {
bool d_update_rate; // should sched update rel rate?
bool d_finished; // true if msg ports think we are finished
+ static const pmt::pmt_t d_pmt_done;
+
protected:
block(void) {} // allows pure virtual interface sub-classes
block(const std::string &name,
@@ -861,6 +863,10 @@ namespace gr {
// These are really only for internal use, but leaving them public avoids
// having to work up an ever-varying list of friend GR_RUNTIME_APIs
+ /*! PMT Symbol of the system port, `pmt::mp("system")`
+ */
+ static const pmt::pmt_t d_system_port;
+
public:
block_detail_sptr detail() const { return d_detail; }
void set_detail(block_detail_sptr detail) { d_detail = detail; }
diff --git a/gnuradio-runtime/lib/block.cc b/gnuradio-runtime/lib/block.cc
index 2bae8ea9f8..c7eafb0fc7 100644
--- a/gnuradio-runtime/lib/block.cc
+++ b/gnuradio-runtime/lib/block.cc
@@ -34,6 +34,9 @@
namespace gr {
+ const pmt::pmt_t block::d_system_port = pmt::intern("system");
+ const pmt::pmt_t block::d_pmt_done = pmt::intern("done");
+
block::block(const std::string &name,
io_signature::sptr input_signature,
io_signature::sptr output_signature)
@@ -57,8 +60,8 @@ namespace gr {
d_min_output_buffer(std::max(output_signature->max_streams(),1), -1)
{
global_block_registry.register_primitive(alias(), this);
- message_port_register_in(pmt::mp("system"));
- set_msg_handler(pmt::mp("system"), boost::bind(&block::system_handler, this, _1));
+ message_port_register_in(d_system_port);
+ set_msg_handler(d_system_port, boost::bind(&block::system_handler, this, _1));
configure_default_loggers(d_logger, d_debug_logger, symbol_name());
}
@@ -706,7 +709,7 @@ namespace gr {
{
//std::cout << "system_handler " << msg << "\n";
pmt::pmt_t op = pmt::car(msg);
- if(pmt::eqv(op, pmt::mp("done"))){
+ if(pmt::eqv(op, d_pmt_done)){
d_finished = pmt::to_long(pmt::cdr(msg));
global_block_registry.notify_blk(alias());
} else {
@@ -733,16 +736,10 @@ namespace gr {
pmt::pmt_t target = pmt::car(currlist);
pmt::pmt_t block = pmt::car(target);
- pmt::pmt_t port = pmt::mp("system");
currlist = pmt::cdr(currlist);
basic_block_sptr blk = global_block_registry.block_lookup(block);
- blk->post(port, pmt::cons(pmt::mp("done"), pmt::mp(true)));
-
- //std::cout << "notify finished --> ";
- //pmt::print(pmt::cons(block,port));
- //std::cout << "\n";
-
+ blk->post(d_system_port, pmt::cons(d_pmt_done, pmt::mp(true)));
}
}
}