From cba26c9ed901e9cce4812519db5f04ac0d198f5d Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Mon, 23 Sep 2013 11:47:14 +0200 Subject: [PATCH] tests: handle unscheduled entries correctly Make the testclock return GST_CLOCK_UNSCHEDULED when an unscheduled entry is used for gst_clock_wait() or gst_clock_wait_async(). Fixes https://bugzilla.gnome.org/show_bug.cgi?id=708605 --- libs/gst/check/gsttestclock.c | 24 ++++++++++++++++++++++++ tests/check/libs/gsttestclock.c | 5 +++++ 2 files changed, 29 insertions(+) diff --git a/libs/gst/check/gsttestclock.c b/libs/gst/check/gsttestclock.c index 120337b8b4..f9737a6aa6 100644 --- a/libs/gst/check/gsttestclock.c +++ b/libs/gst/check/gsttestclock.c @@ -423,6 +423,9 @@ gst_test_clock_wait (GstClock * clock, "requesting synchronous clock notification at %" GST_TIME_FORMAT, GST_TIME_ARGS (GST_CLOCK_ENTRY_TIME (entry))); + if (GST_CLOCK_ENTRY_STATUS (entry) == GST_CLOCK_UNSCHEDULED) + goto was_unscheduled; + if (gst_test_clock_lookup_entry_context (test_clock, entry) == NULL) gst_test_clock_add_entry (test_clock, entry, jitter); @@ -434,6 +437,15 @@ gst_test_clock_wait (GstClock * clock, GST_OBJECT_UNLOCK (test_clock); return GST_CLOCK_ENTRY_STATUS (entry); + + /* ERRORS */ +was_unscheduled: + { + GST_CAT_DEBUG_OBJECT (GST_CAT_TEST_CLOCK, test_clock, + "entry was unscheduled"); + GST_OBJECT_UNLOCK (test_clock); + return GST_CLOCK_UNSCHEDULED; + } } static GstClockReturn @@ -443,6 +455,9 @@ gst_test_clock_wait_async (GstClock * clock, GstClockEntry * entry) GST_OBJECT_LOCK (test_clock); + if (GST_CLOCK_ENTRY_STATUS (entry) == GST_CLOCK_UNSCHEDULED) + goto was_unscheduled; + GST_CAT_DEBUG_OBJECT (GST_CAT_TEST_CLOCK, test_clock, "requesting asynchronous clock notification at %" GST_TIME_FORMAT, GST_TIME_ARGS (GST_CLOCK_ENTRY_TIME (entry))); @@ -452,6 +467,15 @@ gst_test_clock_wait_async (GstClock * clock, GstClockEntry * entry) GST_OBJECT_UNLOCK (test_clock); return GST_CLOCK_OK; + + /* ERRORS */ +was_unscheduled: + { + GST_CAT_DEBUG_OBJECT (GST_CAT_TEST_CLOCK, test_clock, + "entry was unscheduled"); + GST_OBJECT_UNLOCK (test_clock); + return GST_CLOCK_UNSCHEDULED; + } } static void diff --git a/tests/check/libs/gsttestclock.c b/tests/check/libs/gsttestclock.c index de59031b51..ab0c13d87a 100644 --- a/tests/check/libs/gsttestclock.c +++ b/tests/check/libs/gsttestclock.c @@ -513,12 +513,17 @@ GST_START_TEST (test_single_shot_sync_unschedule) GstTestClock *test_clock; GstClockID clock_id; GtuClockWaitContext *wait_ctx; + gboolean wait_complete = FALSE; clock = gst_test_clock_new_with_start_time (GST_SECOND); test_clock = GST_TEST_CLOCK (clock); clock_id = gst_clock_new_single_shot_id (clock, GST_SECOND); gst_clock_id_unschedule (clock_id); + /* any wait should timeout immediately */ + g_assert (gst_clock_id_wait_async (clock_id, test_async_wait_cb, + &wait_complete, NULL) == GST_CLOCK_UNSCHEDULED); + g_assert (gst_clock_id_wait (clock_id, NULL) == GST_CLOCK_UNSCHEDULED); gst_clock_id_unref (clock_id); clock_id = gst_clock_new_single_shot_id (clock, 2 * GST_SECOND);