diff options
author | Wim Taymans <wim.taymans@collabora.co.uk> | 2013-09-23 11:47:14 +0200 |
---|---|---|
committer | Wim Taymans <wim.taymans@collabora.co.uk> | 2013-09-23 11:47:14 +0200 |
commit | cba26c9ed901e9cce4812519db5f04ac0d198f5d (patch) | |
tree | 7fcbf9dc3eecf82148754247a7a806de5bab92d9 | |
parent | 3e4b4eb59bb691c9e1c00a7a5268e68d4444bc7d (diff) |
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
-rw-r--r-- | libs/gst/check/gsttestclock.c | 24 | ||||
-rw-r--r-- | tests/check/libs/gsttestclock.c | 5 |
2 files changed, 29 insertions, 0 deletions
diff --git a/libs/gst/check/gsttestclock.c b/libs/gst/check/gsttestclock.c index 120337b8b..f9737a6aa 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 de59031b5..ab0c13d87 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); |