From 6004504f6ad96354096062faa7022da24efe605c Mon Sep 17 00:00:00 2001 From: Steve Baker Date: Sat, 1 Jun 2002 15:01:51 +0000 Subject: [PATCH] added a test which shows a problem with state changes when the toplevel bin is a thread. Original commit message from CVS: added a test which shows a problem with state changes when the toplevel bin is a thread. there is some kind of deadlock. It would be good if wingo or wtay could have a look. --- configure.ac | 1 + tests/Makefile.am | 4 ++-- tests/threadstate/Makefile.am | 4 ++++ tests/threadstate/threadstate1.c | 35 ++++++++++++++++++++++++++++++++ 4 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 tests/threadstate/Makefile.am create mode 100644 tests/threadstate/threadstate1.c diff --git a/configure.ac b/configure.ac index c29ed8296f..17671ef6de 100644 --- a/configure.ac +++ b/configure.ac @@ -432,6 +432,7 @@ tests/bufspeed/Makefile tests/memchunk/Makefile tests/muxing/Makefile tests/sched/Makefile +tests/threadstate/Makefile testsuite/Makefile testsuite/bytestream/Makefile testsuite/caps/Makefile diff --git a/tests/Makefile.am b/tests/Makefile.am index dec0cd0ce6..a11d79d57b 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -6,7 +6,7 @@ else NASMDEP_DIR= endif -SUBDIRS = $(NASMDEP_DIR) muxing sched +SUBDIRS = $(NASMDEP_DIR) muxing sched threadstate noinst_PROGRAMS = lat @@ -14,4 +14,4 @@ lat_CFLAGS = $(GST_CFLAGS) lat_LDFLAGS = $(GST_LIBS) EXTRA_DIST = README -DIST_SUBDIRS= bufspeed memchunk muxing sched +DIST_SUBDIRS= bufspeed memchunk muxing sched threadstate diff --git a/tests/threadstate/Makefile.am b/tests/threadstate/Makefile.am new file mode 100644 index 0000000000..e8976516cf --- /dev/null +++ b/tests/threadstate/Makefile.am @@ -0,0 +1,4 @@ +noinst_PROGRAMS = threadstate1 + +LDADD = $(GST_LIBS) +AM_CFLAGS = $(GST_CFLAGS) diff --git a/tests/threadstate/threadstate1.c b/tests/threadstate/threadstate1.c new file mode 100644 index 0000000000..bf1831d5a9 --- /dev/null +++ b/tests/threadstate/threadstate1.c @@ -0,0 +1,35 @@ +#include + +int main(int argc,char *argv[]) +{ + GstElement *fakesrc, *fakesink; + GstElement *thread; + gint x; + + gst_init(&argc,&argv); + + thread = gst_thread_new("thread"); + g_assert(thread != NULL); + + fakesrc = gst_element_factory_make("fakesrc", "fake_source"); + g_assert(fakesrc != NULL); + + fakesink = gst_element_factory_make("fakesink", "fake_sink"); + g_assert(fakesink != NULL); + + gst_bin_add_many (GST_BIN(thread), fakesrc, fakesink, NULL); + gst_element_connect (fakesrc, fakesink); + + for (x = 0 ; x < 10 ; x++){ + g_print("playing %d\n", x); + gst_element_set_state(GST_ELEMENT(thread), GST_STATE_PLAYING); + sleep(1); + + g_print("pausing %d\n", x); + gst_element_set_state(GST_ELEMENT(thread), GST_STATE_PAUSED); + sleep(1); + } + + exit(0); +} +