diff --git a/check/gst/gstobject.c b/check/gst/gstobject.c index 7057cd7480..06339cf49b 100644 --- a/check/gst/gstobject.c +++ b/check/gst/gstobject.c @@ -139,7 +139,7 @@ END_TEST while (THREAD_TEST_RUNNING ()) { gst_object_set_name (object, thread_id); /* a minimal sleep invokes a thread switch */ - g_usleep (1); + THREAD_SWITCH (); } /* thread is done, so let's return */ @@ -171,7 +171,7 @@ START_TEST (test_fake_object_name_threaded_wrong) /* start looping and set/get name repeatedly */ for (i = 0; i < 1000; ++i) { gst_object_set_name (object, "main"); - g_usleep (1); /* switch */ + THREAD_SWITCH (); name = gst_object_get_name (object); if (strcmp (name, "main") != 0) { g_message ("MAIN: expected failure during run %d\n", i); @@ -209,7 +209,7 @@ START_TEST (test_fake_object_name_threaded_right) GST_LOCK (object); g_free (GST_OBJECT_NAME (object)); GST_OBJECT_NAME (object) = g_strdup ("main"); - g_usleep (1); /* switch */ + THREAD_SWITCH (); name = g_strdup (GST_OBJECT_NAME (object)); GST_UNLOCK (object); @@ -244,8 +244,7 @@ thread_name_object_default (int *i) /* g_message ("THREAD %p: setting default name on object %d\n", g_thread_self (), j); */ gst_object_set_name (o, NULL); - /* a minimal sleep invokes a thread switch */ - g_usleep (1); + THREAD_SWITCH (); } /* thread is done, so let's return */ diff --git a/check/gst/gstpad.c b/check/gst/gstpad.c index 738e0e283d..ac64110e77 100644 --- a/check/gst/gstpad.c +++ b/check/gst/gstpad.c @@ -58,6 +58,45 @@ START_TEST (test_link) fail_unless (ret == GST_PAD_LINK_OK); } +END_TEST +/* threaded link/unlink */ +/* use globals */ + GstPad * src, *sink; + +void +thread_link_unlink (gpointer data) +{ + THREAD_START (); + + while (THREAD_TEST_RUNNING ()) { + gst_pad_link (src, sink); + gst_pad_unlink (src, sink); + THREAD_SWITCH (); + } +} + +START_TEST (test_link_unlink_threaded) +{ + GstCaps *caps; + int i; + + src = gst_pad_new ("source", GST_PAD_SRC); + fail_if (src == NULL); + sink = gst_pad_new ("sink", GST_PAD_SINK); + fail_if (sink == NULL); + + caps = gst_caps_new_any (); + gst_pad_set_caps (src, caps); + gst_pad_set_caps (sink, caps); + + MAIN_START_THREADS (5, thread_link_unlink, NULL); + for (i = 0; i < 1000; ++i) { + gst_pad_is_linked (src); + gst_pad_is_linked (sink); + THREAD_SWITCH (); + } + MAIN_STOP_THREADS (); +} END_TEST Suite * gst_pad_suite (void) { Suite *s = suite_create ("GstPad"); @@ -65,6 +104,7 @@ END_TEST Suite * gst_pad_suite (void) suite_add_tcase (s, tc_chain); tcase_add_test (tc_chain, test_link); + tcase_add_test (tc_chain, test_link_unlink_threaded); return s; } diff --git a/tests/check/gst/gstobject.c b/tests/check/gst/gstobject.c index 7057cd7480..06339cf49b 100644 --- a/tests/check/gst/gstobject.c +++ b/tests/check/gst/gstobject.c @@ -139,7 +139,7 @@ END_TEST while (THREAD_TEST_RUNNING ()) { gst_object_set_name (object, thread_id); /* a minimal sleep invokes a thread switch */ - g_usleep (1); + THREAD_SWITCH (); } /* thread is done, so let's return */ @@ -171,7 +171,7 @@ START_TEST (test_fake_object_name_threaded_wrong) /* start looping and set/get name repeatedly */ for (i = 0; i < 1000; ++i) { gst_object_set_name (object, "main"); - g_usleep (1); /* switch */ + THREAD_SWITCH (); name = gst_object_get_name (object); if (strcmp (name, "main") != 0) { g_message ("MAIN: expected failure during run %d\n", i); @@ -209,7 +209,7 @@ START_TEST (test_fake_object_name_threaded_right) GST_LOCK (object); g_free (GST_OBJECT_NAME (object)); GST_OBJECT_NAME (object) = g_strdup ("main"); - g_usleep (1); /* switch */ + THREAD_SWITCH (); name = g_strdup (GST_OBJECT_NAME (object)); GST_UNLOCK (object); @@ -244,8 +244,7 @@ thread_name_object_default (int *i) /* g_message ("THREAD %p: setting default name on object %d\n", g_thread_self (), j); */ gst_object_set_name (o, NULL); - /* a minimal sleep invokes a thread switch */ - g_usleep (1); + THREAD_SWITCH (); } /* thread is done, so let's return */ diff --git a/tests/check/gst/gstpad.c b/tests/check/gst/gstpad.c index 738e0e283d..ac64110e77 100644 --- a/tests/check/gst/gstpad.c +++ b/tests/check/gst/gstpad.c @@ -58,6 +58,45 @@ START_TEST (test_link) fail_unless (ret == GST_PAD_LINK_OK); } +END_TEST +/* threaded link/unlink */ +/* use globals */ + GstPad * src, *sink; + +void +thread_link_unlink (gpointer data) +{ + THREAD_START (); + + while (THREAD_TEST_RUNNING ()) { + gst_pad_link (src, sink); + gst_pad_unlink (src, sink); + THREAD_SWITCH (); + } +} + +START_TEST (test_link_unlink_threaded) +{ + GstCaps *caps; + int i; + + src = gst_pad_new ("source", GST_PAD_SRC); + fail_if (src == NULL); + sink = gst_pad_new ("sink", GST_PAD_SINK); + fail_if (sink == NULL); + + caps = gst_caps_new_any (); + gst_pad_set_caps (src, caps); + gst_pad_set_caps (sink, caps); + + MAIN_START_THREADS (5, thread_link_unlink, NULL); + for (i = 0; i < 1000; ++i) { + gst_pad_is_linked (src); + gst_pad_is_linked (sink); + THREAD_SWITCH (); + } + MAIN_STOP_THREADS (); +} END_TEST Suite * gst_pad_suite (void) { Suite *s = suite_create ("GstPad"); @@ -65,6 +104,7 @@ END_TEST Suite * gst_pad_suite (void) suite_add_tcase (s, tc_chain); tcase_add_test (tc_chain, test_link); + tcase_add_test (tc_chain, test_link_unlink_threaded); return s; }