"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);
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
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)));
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
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);