diff options
Diffstat (limited to 'gnuradio-core/src/lib/runtime/gr_runtime.cc')
-rw-r--r-- | gnuradio-core/src/lib/runtime/gr_runtime.cc | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/gnuradio-core/src/lib/runtime/gr_runtime.cc b/gnuradio-core/src/lib/runtime/gr_runtime.cc index 926e87857..93f78fea8 100644 --- a/gnuradio-core/src/lib/runtime/gr_runtime.cc +++ b/gnuradio-core/src/lib/runtime/gr_runtime.cc @@ -26,8 +26,11 @@ #include <gr_runtime.h> #include <gr_runtime_impl.h> +#include <gr_local_sighandler.h> #include <iostream> +static gr_runtime *s_runtime = 0; + gr_runtime_sptr gr_make_runtime(gr_hier_block2_sptr top_block) { @@ -37,16 +40,29 @@ gr_make_runtime(gr_hier_block2_sptr top_block) gr_runtime::gr_runtime(gr_hier_block2_sptr top_block) { d_impl = new gr_runtime_impl(top_block); + s_runtime = this; } gr_runtime::~gr_runtime() { + s_runtime = 0; // we don't own this delete d_impl; } +// HACK: This prevents using more than one gr_runtime instance +static void +runtime_sigint_handler(int signum) +{ + + if (s_runtime) + s_runtime->stop(); +} + void gr_runtime::start() { + gr_local_sighandler sigint(SIGINT, runtime_sigint_handler); + d_impl->start(); } @@ -59,12 +75,16 @@ gr_runtime::stop() void gr_runtime::wait() { + gr_local_sighandler sigint(SIGINT, runtime_sigint_handler); + d_impl->wait(); } void gr_runtime::run() { - start(); - wait(); + gr_local_sighandler sigint(SIGINT, runtime_sigint_handler); + + d_impl->start(); + d_impl->wait(); } |