From 2abda17d8ed2794ff5b4bc0d9f61d30d8ffac651 Mon Sep 17 00:00:00 2001
From: Josh Blum <josh@joshknows.com>
Date: Sat, 29 Sep 2012 20:29:27 -0700
Subject: core: fix implicit assumption in skiphead

skiphead is a gr_block, not sync block, but assumes that the number of input items is at least the number of output items

remove this assumption and make this safe with std::min(ninputs, noutputs)

may be necessary with new scheduler patches that can vary the circular buffer sizes
---
 gnuradio-core/src/lib/general/gr_skiphead.cc | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

(limited to 'gnuradio-core/src')

diff --git a/gnuradio-core/src/lib/general/gr_skiphead.cc b/gnuradio-core/src/lib/general/gr_skiphead.cc
index c887376e45..7b441bea9a 100644
--- a/gnuradio-core/src/lib/general/gr_skiphead.cc
+++ b/gnuradio-core/src/lib/general/gr_skiphead.cc
@@ -43,14 +43,14 @@ gr_make_skiphead (size_t itemsize, uint64_t nitems_to_skip)
 
 int
 gr_skiphead::general_work(int noutput_items,
-			  gr_vector_int &ninput_items_ignored,
+			  gr_vector_int &ninput_items_,
 			  gr_vector_const_void_star &input_items,
 			  gr_vector_void_star &output_items)
 {
   const char *in = (const char *) input_items[0];
   char *out = (char *) output_items[0];
 
-  int ninput_items = noutput_items;	// we've got at least this many input items
+  int ninput_items = std::min(ninput_items_[0], noutput_items);
   int ii = 0;				// input index
 
   while (ii < ninput_items){
-- 
cgit v1.2.3


From a7e260a09bdb923b77174cedd31c2d7d70f32765 Mon Sep 17 00:00:00 2001
From: Josh Blum <josh@joshknows.com>
Date: Sat, 29 Sep 2012 20:13:38 -0700
Subject: core: source block can yield thread context/produce none

---
 gnuradio-core/src/lib/runtime/gr_block_executor.cc | 2 ++
 1 file changed, 2 insertions(+)

(limited to 'gnuradio-core/src')

diff --git a/gnuradio-core/src/lib/runtime/gr_block_executor.cc b/gnuradio-core/src/lib/runtime/gr_block_executor.cc
index 6fea14613b..c085344757 100644
--- a/gnuradio-core/src/lib/runtime/gr_block_executor.cc
+++ b/gnuradio-core/src/lib/runtime/gr_block_executor.cc
@@ -449,6 +449,7 @@ gr_block_executor::run_one_iteration()
     // We didn't produce any output even though we called general_work.
     // We have (most likely) consumed some input.
 
+    /*
     // If this is a source, it's broken.
     if (d->source_p()){
       std::cerr << "gr_block_executor: source " << m
@@ -456,6 +457,7 @@ gr_block_executor::run_one_iteration()
       // FIXME maybe we ought to raise an exception...
       goto were_done;
     }
+    */
 
     // Have the caller try again...
     return READY_NO_OUTPUT;
-- 
cgit v1.2.3


From 65ea256f8de15b7a23c602f9775edf0636b3732c Mon Sep 17 00:00:00 2001
From: Josh Blum <josh@joshknows.com>
Date: Sat, 29 Sep 2012 20:19:16 -0700
Subject: core: udp source wait mode yields work thread

---
 gnuradio-core/src/lib/io/gr_udp_source.cc | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

(limited to 'gnuradio-core/src')

diff --git a/gnuradio-core/src/lib/io/gr_udp_source.cc b/gnuradio-core/src/lib/io/gr_udp_source.cc
index af41159ee9..eca8e89d01 100644
--- a/gnuradio-core/src/lib/io/gr_udp_source.cc
+++ b/gnuradio-core/src/lib/io/gr_udp_source.cc
@@ -269,8 +269,9 @@ gr_udp_source::work (int noutput_items,
     else if(r == 0 ) {  // timed out
       if( d_wait ) {
 	// Allow boost thread interrupt, then try again
-	boost::this_thread::interruption_point();
-	continue;
+	//boost::this_thread::interruption_point();
+	//continue;
+	return 0;
       }
       else
 	return -1;
@@ -294,8 +295,9 @@ gr_udp_source::work (int noutput_items,
 
 	if( d_wait ) {
 	  // Allow boost thread interrupt, then try again
-	  boost::this_thread::interruption_point();
-	  continue;
+	  //boost::this_thread::interruption_point();
+	  //continue;
+	  return 0;
 	}
 	else
 	  return -1;
-- 
cgit v1.2.3