From 95144e53f0285d9e5ea897348030a33c18773b60 Mon Sep 17 00:00:00 2001 From: jcorgan <jcorgan@221aa14e-8319-0410-a670-987f0aec2ac5> Date: Mon, 18 Dec 2006 04:35:19 +0000 Subject: Merged jcorgan/sfg r4097:4124 into trunk, fixing hier_block2 threading issues. git-svn-id: http://gnuradio.org/svn/gnuradio/trunk@4126 221aa14e-8319-0410-a670-987f0aec2ac5 --- gnuradio-core/src/lib/runtime/gr_runtime.cc | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) (limited to 'gnuradio-core/src/lib/runtime/gr_runtime.cc') diff --git a/gnuradio-core/src/lib/runtime/gr_runtime.cc b/gnuradio-core/src/lib/runtime/gr_runtime.cc index 926e878575..93f78fea85 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(); } -- cgit v1.2.3