commit-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Commit-gnuradio] r8269 - gnuradio/branches/developers/jcorgan/merge-fix


From: jcorgan
Subject: [Commit-gnuradio] r8269 - gnuradio/branches/developers/jcorgan/merge-fix/gnuradio-core/src/lib/runtime
Date: Thu, 24 Apr 2008 14:20:20 -0600 (MDT)

Author: jcorgan
Date: 2008-04-24 14:20:20 -0600 (Thu, 24 Apr 2008)
New Revision: 8269

Modified:
   
gnuradio/branches/developers/jcorgan/merge-fix/gnuradio-core/src/lib/runtime/gr_flat_flowgraph.cc
Log:
Fix reconfiguration bug by removing old buffer readers not reused in 
reconfigured flowgraph.

Modified: 
gnuradio/branches/developers/jcorgan/merge-fix/gnuradio-core/src/lib/runtime/gr_flat_flowgraph.cc
===================================================================
--- 
gnuradio/branches/developers/jcorgan/merge-fix/gnuradio-core/src/lib/runtime/gr_flat_flowgraph.cc
   2008-04-24 17:44:37 UTC (rev 8268)
+++ 
gnuradio/branches/developers/jcorgan/merge-fix/gnuradio-core/src/lib/runtime/gr_flat_flowgraph.cc
   2008-04-24 20:20:20 UTC (rev 8269)
@@ -161,6 +161,33 @@
         std::cout << "merge: reusing original detail for block " << (*p) << 
std::endl;
   }
 
+  // Calculate the old edges that will be going away, and clear the buffer 
readers
+  // on the RHS.
+  for (gr_edge_viter_t old_edge = old_ffg->d_edges.begin(); old_edge != 
old_ffg->d_edges.end(); old_edge++) {
+    if (GR_FLAT_FLOWGRAPH_DEBUG)
+      std::cout << "merge: testing old edge " << (*old_edge) << "...";
+      
+    gr_edge_viter_t new_edge;
+    for (new_edge = d_edges.begin(); new_edge != d_edges.end(); new_edge++)
+      if (new_edge->src() == old_edge->src() &&
+         new_edge->dst() == old_edge->dst())
+       break;
+
+    if (new_edge == d_edges.end()) { // not found in new edge list
+      if (GR_FLAT_FLOWGRAPH_DEBUG)
+       std::cout << "not in new edge list" << std::endl;
+      // zero the buffer reader on RHS of old edge
+      gr_block_sptr block(make_gr_block_sptr(old_edge->dst().block()));
+      int port = old_edge->dst().port();
+      block->detail()->set_input(port, gr_buffer_reader_sptr());
+    }
+    else {
+      if (GR_FLAT_FLOWGRAPH_DEBUG)
+       std::cout << "found in new edge list" << std::endl;
+    }
+  }  
+
+  // Now connect inputs to outputs, reusing old buffer readers if they exist
   for (gr_basic_block_viter_t p = d_blocks.begin(); p != d_blocks.end(); p++) {
     gr_block_sptr block = make_gr_block_sptr(*p);
 





reply via email to

[Prev in Thread] Current Thread [Next in Thread]