[Top][All Lists]
[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 */
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Commit-gnuradio] r6180 - gnuradio/branches/developers/jcorgan/fg/gnuradio-core/src/lib/runtime,
jcorgan <=