commit-gnuradio
[Top][All Lists]
Advanced

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

[Commit-gnuradio] r6180 - gnuradio/branches/developers/jcorgan/fg/gnurad


From: jcorgan
Subject: [Commit-gnuradio] r6180 - gnuradio/branches/developers/jcorgan/fg/gnuradio-core/src/lib/runtime
Date: Sun, 26 Aug 2007 23:17:40 -0600 (MDT)

Author: jcorgan
Date: 2007-08-26 23:17:40 -0600 (Sun, 26 Aug 2007)
New Revision: 6180

Modified:
   
gnuradio/branches/developers/jcorgan/fg/gnuradio-core/src/lib/runtime/gr_scheduler_thread.cc
   
gnuradio/branches/developers/jcorgan/fg/gnuradio-core/src/lib/runtime/gr_top_block_impl.cc
   
gnuradio/branches/developers/jcorgan/fg/gnuradio-core/src/lib/runtime/gr_top_block_impl.h
   
gnuradio/branches/developers/jcorgan/fg/gnuradio-core/src/lib/runtime/qa_gr_top_block.cc
   
gnuradio/branches/developers/jcorgan/fg/gnuradio-core/src/lib/runtime/qa_gr_top_block.h
Log:
Added gr_top_block QA code. Case t4 triggers 'join never returns' bug.

Modified: 
gnuradio/branches/developers/jcorgan/fg/gnuradio-core/src/lib/runtime/gr_scheduler_thread.cc
===================================================================
--- 
gnuradio/branches/developers/jcorgan/fg/gnuradio-core/src/lib/runtime/gr_scheduler_thread.cc
        2007-08-27 04:33:15 UTC (rev 6179)
+++ 
gnuradio/branches/developers/jcorgan/fg/gnuradio-core/src/lib/runtime/gr_scheduler_thread.cc
        2007-08-27 05:17:40 UTC (rev 6180)
@@ -25,11 +25,14 @@
 #endif
 
 #include <gr_scheduler_thread.h>
+#include <iostream>
 
 #ifdef HAVE_SIGNAL_H
 #include <signal.h>
 #endif
 
+#define GR_SCHEDULER_THREAD_DEBUG 1
+
 gr_scheduler_thread::gr_scheduler_thread(gr_block_vector_t graph) :
   omni_thread(NULL, PRIORITY_NORMAL),
   d_sts(gr_make_single_threaded_scheduler(graph))
@@ -66,5 +69,7 @@
 void
 gr_scheduler_thread::stop()
 {
+  if (GR_SCHEDULER_THREAD_DEBUG)
+    std::cout << "gr_scheduler_thread::stop()" << std::endl;
   d_sts->stop();
 }

Modified: 
gnuradio/branches/developers/jcorgan/fg/gnuradio-core/src/lib/runtime/gr_top_block_impl.cc
===================================================================
--- 
gnuradio/branches/developers/jcorgan/fg/gnuradio-core/src/lib/runtime/gr_top_block_impl.cc
  2007-08-27 04:33:15 UTC (rev 6179)
+++ 
gnuradio/branches/developers/jcorgan/fg/gnuradio-core/src/lib/runtime/gr_top_block_impl.cc
  2007-08-27 05:17:40 UTC (rev 6180)
@@ -64,7 +64,8 @@
 gr_top_block_impl::gr_top_block_impl(gr_top_block *owner) 
   : d_running(false),
     d_ffg(gr_make_flat_flowgraph()),
-    d_owner(owner)
+    d_owner(owner),
+    d_lock_count(0)
 {
   s_impl = this;
 }
@@ -99,6 +100,8 @@
 void
 gr_top_block_impl::start_threads()
 {
+  omni_mutex_lock lock(d_threads_mutex);
+
   if (GR_TOP_BLOCK_IMPL_DEBUG)
     std::cout << "start_threads: entered" << std::endl;
 
@@ -118,6 +121,8 @@
 void
 gr_top_block_impl::stop()
 {
+  omni_mutex_lock lock(d_threads_mutex);
+
   if (GR_TOP_BLOCK_IMPL_DEBUG)
     std::cout << "stop: entered" << std::endl;
 
@@ -133,6 +138,8 @@
 void
 gr_top_block_impl::wait()
 {
+  omni_mutex_lock lock(d_threads_mutex);
+
   if (GR_TOP_BLOCK_IMPL_DEBUG)
     std::cout << "wait: entered" << std::endl;
 

Modified: 
gnuradio/branches/developers/jcorgan/fg/gnuradio-core/src/lib/runtime/gr_top_block_impl.h
===================================================================
--- 
gnuradio/branches/developers/jcorgan/fg/gnuradio-core/src/lib/runtime/gr_top_block_impl.h
   2007-08-27 04:33:15 UTC (rev 6179)
+++ 
gnuradio/branches/developers/jcorgan/fg/gnuradio-core/src/lib/runtime/gr_top_block_impl.h
   2007-08-27 05:17:40 UTC (rev 6180)
@@ -59,6 +59,7 @@
     
   bool                           d_running;
   gr_flat_flowgraph_sptr         d_ffg;
+  omni_mutex                     d_threads_mutex;
   gr_scheduler_thread_vector_t   d_threads;
   gr_top_block                  *d_owner;
   int                            d_lock_count;

Modified: 
gnuradio/branches/developers/jcorgan/fg/gnuradio-core/src/lib/runtime/qa_gr_top_block.cc
===================================================================
--- 
gnuradio/branches/developers/jcorgan/fg/gnuradio-core/src/lib/runtime/qa_gr_top_block.cc
    2007-08-27 04:33:15 UTC (rev 6179)
+++ 
gnuradio/branches/developers/jcorgan/fg/gnuradio-core/src/lib/runtime/qa_gr_top_block.cc
    2007-08-27 05:17:40 UTC (rev 6180)
@@ -26,7 +26,7 @@
 
 #include <qa_gr_top_block.h>
 #include <gr_top_block.h>
-#include <gr_nop.h>
+#include <gr_head.h>
 #include <gr_null_source.h>
 #include <gr_null_sink.h>
 
@@ -36,3 +36,75 @@
 
   CPPUNIT_ASSERT(tb);
 }
+
+void qa_gr_top_block::t1_run()
+{
+  gr_top_block_sptr tb = gr_make_top_block("top");
+
+  gr_block_sptr src = gr_make_null_source(sizeof(int));
+  gr_block_sptr head = gr_make_head(sizeof(int), 1);
+  gr_block_sptr dst = gr_make_null_sink(sizeof(int));
+
+  tb->connect(src, 0, head, 0);
+  tb->connect(head, 0, dst, 0);
+  tb->run();
+}
+
+void qa_gr_top_block::t2_start_stop_wait()
+{
+  gr_top_block_sptr tb = gr_make_top_block("top");
+
+  gr_block_sptr src = gr_make_null_source(sizeof(int));
+  gr_block_sptr head = gr_make_head(sizeof(int), 1000000);
+  gr_block_sptr dst = gr_make_null_sink(sizeof(int));
+
+  tb->connect(src, 0, head, 0);
+  tb->connect(head, 0, dst, 0);
+
+  tb->start();
+  tb->stop();
+  tb->wait();
+}
+
+void qa_gr_top_block::t3_lock_unlock()
+{
+  gr_top_block_sptr tb = gr_make_top_block("top");
+
+  gr_block_sptr src = gr_make_null_source(sizeof(int));
+  gr_block_sptr head = gr_make_head(sizeof(int), 1000000);
+  gr_block_sptr dst = gr_make_null_sink(sizeof(int));
+
+  tb->connect(src, 0, head, 0);
+  tb->connect(head, 0, dst, 0);
+
+  tb->start();
+
+  tb->lock();
+  tb->unlock();
+
+  tb->stop();
+  tb->wait();
+}
+
+void qa_gr_top_block::t4_reconfigure()
+{
+  gr_top_block_sptr tb = gr_make_top_block("top");
+
+  gr_block_sptr src = gr_make_null_source(sizeof(int));
+  gr_block_sptr head = gr_make_head(sizeof(int), 1);
+  gr_block_sptr dst = gr_make_null_sink(sizeof(int));
+
+  // Start infinite flowgraph
+  tb->connect(src, 0, dst, 0);
+  tb->start();
+
+  // Reconfigure with gr_head in the middle
+  tb->lock();
+  tb->disconnect(src, 0, dst, 0);
+  tb->connect(src, 0, head, 0);
+  tb->connect(head, 0, dst, 0);
+  tb->unlock();
+
+  // Wait for flowgraph to end on its own
+  tb->wait();
+}

Modified: 
gnuradio/branches/developers/jcorgan/fg/gnuradio-core/src/lib/runtime/qa_gr_top_block.h
===================================================================
--- 
gnuradio/branches/developers/jcorgan/fg/gnuradio-core/src/lib/runtime/qa_gr_top_block.h
     2007-08-27 04:33:15 UTC (rev 6179)
+++ 
gnuradio/branches/developers/jcorgan/fg/gnuradio-core/src/lib/runtime/qa_gr_top_block.h
     2007-08-27 05:17:40 UTC (rev 6180)
@@ -32,12 +32,20 @@
   CPPUNIT_TEST_SUITE(qa_gr_top_block);
   
   CPPUNIT_TEST(t0);
+  CPPUNIT_TEST(t1_run);
+  CPPUNIT_TEST(t2_start_stop_wait);
+  CPPUNIT_TEST(t3_lock_unlock);
+  // CPPUNIT_TEST(t4_reconfigure);  triggers 'join never returns' bug
 
   CPPUNIT_TEST_SUITE_END();
 
 private:
 
   void t0();
+  void t1_run();
+  void t2_start_stop_wait();
+  void t3_lock_unlock();
+  void t4_reconfigure();
 };
 
 #endif /* INCLUDED_QA_GR_TOP_BLOCK_H */





reply via email to

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