aboutsummaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorSebastian Dröge <slomo@circular-chaos.org>2013-09-24 16:09:40 +0200
committerSebastian Dröge <slomo@circular-chaos.org>2013-09-24 16:09:40 +0200
commit2f89c9b4e85dc40ca7b38ccc6fbd6298ad32e54a (patch)
treeda9e94db59eddeaffa17d735d22ed099350621a4 /libs
parent4a6883f21d411dc411914054a69aa40d987bf66b (diff)
Imported Upstream version 1.2.0upstream/1.2.0
Diffstat (limited to 'libs')
-rw-r--r--libs/gst/base/gstcollectpads.c6
-rw-r--r--libs/gst/check/gsttestclock.c72
2 files changed, 59 insertions, 19 deletions
diff --git a/libs/gst/base/gstcollectpads.c b/libs/gst/base/gstcollectpads.c
index d24e03b..3d69abd 100644
--- a/libs/gst/base/gstcollectpads.c
+++ b/libs/gst/base/gstcollectpads.c
@@ -726,7 +726,7 @@ unknown_pad:
}
/*
- * Must be called with STREAM_LOCK.
+ * Must be called with STREAM_LOCK and OBJECT_LOCK.
*/
static void
gst_collect_pads_set_flushing_unlocked (GstCollectPads * pads,
@@ -735,7 +735,7 @@ gst_collect_pads_set_flushing_unlocked (GstCollectPads * pads,
GSList *walk = NULL;
/* Update the pads flushing flag */
- for (walk = pads->data; walk; walk = g_slist_next (walk)) {
+ for (walk = pads->priv->pad_list; walk; walk = g_slist_next (walk)) {
GstCollectData *cdata = walk->data;
if (GST_IS_PAD (cdata->pad)) {
@@ -778,7 +778,9 @@ gst_collect_pads_set_flushing (GstCollectPads * pads, gboolean flushing)
/* NOTE since this eventually calls _pop, some (STREAM_)LOCK is needed here */
GST_COLLECT_PADS_STREAM_LOCK (pads);
+ GST_OBJECT_LOCK (pads);
gst_collect_pads_set_flushing_unlocked (pads, flushing);
+ GST_OBJECT_UNLOCK (pads);
GST_COLLECT_PADS_STREAM_UNLOCK (pads);
}
diff --git a/libs/gst/check/gsttestclock.c b/libs/gst/check/gsttestclock.c
index e103da8..f9737a6 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
@@ -621,9 +645,12 @@ gst_test_clock_new_with_start_time (GstClockTime start_time)
void
gst_test_clock_set_time (GstTestClock * test_clock, GstClockTime new_time)
{
- GstTestClockPrivate *priv = GST_TEST_CLOCK_GET_PRIVATE (test_clock);
+ GstTestClockPrivate *priv;
+
+ g_return_if_fail (GST_IS_TEST_CLOCK (test_clock));
+
+ priv = GST_TEST_CLOCK_GET_PRIVATE (test_clock);
- g_assert (GST_IS_TEST_CLOCK (test_clock));
g_assert_cmpuint (new_time, !=, GST_CLOCK_TIME_NONE);
GST_OBJECT_LOCK (test_clock);
@@ -653,9 +680,12 @@ gst_test_clock_set_time (GstTestClock * test_clock, GstClockTime new_time)
void
gst_test_clock_advance_time (GstTestClock * test_clock, GstClockTimeDiff delta)
{
- GstTestClockPrivate *priv = GST_TEST_CLOCK_GET_PRIVATE (test_clock);
+ GstTestClockPrivate *priv;
+
+ g_return_if_fail (GST_IS_TEST_CLOCK (test_clock));
+
+ priv = GST_TEST_CLOCK_GET_PRIVATE (test_clock);
- g_assert (GST_IS_TEST_CLOCK (test_clock));
g_assert_cmpint (delta, >=, 0);
g_assert_cmpuint (delta, <, G_MAXUINT64 - delta);
@@ -687,7 +717,7 @@ gst_test_clock_peek_id_count (GstTestClock * test_clock)
{
guint result;
- g_assert (GST_IS_TEST_CLOCK (test_clock));
+ g_return_val_if_fail (GST_IS_TEST_CLOCK (test_clock), 0);
GST_OBJECT_LOCK (test_clock);
result = gst_test_clock_peek_id_count_unlocked (test_clock);
@@ -716,7 +746,7 @@ gst_test_clock_has_id (GstTestClock * test_clock, GstClockID id)
{
gboolean result;
- g_assert (GST_IS_TEST_CLOCK (test_clock));
+ g_return_val_if_fail (GST_IS_TEST_CLOCK (test_clock), FALSE);
g_assert (id != NULL);
GST_OBJECT_LOCK (test_clock);
@@ -748,7 +778,7 @@ gst_test_clock_peek_next_pending_id (GstTestClock * test_clock,
{
gboolean result;
- g_assert (GST_IS_TEST_CLOCK (test_clock));
+ g_return_val_if_fail (GST_IS_TEST_CLOCK (test_clock), FALSE);
GST_OBJECT_LOCK (test_clock);
result = gst_test_clock_peek_next_pending_id_unlocked (test_clock,
@@ -776,17 +806,19 @@ void
gst_test_clock_wait_for_next_pending_id (GstTestClock * test_clock,
GstClockID * pending_id)
{
- GstTestClockPrivate *priv = GST_TEST_CLOCK_GET_PRIVATE (test_clock);
+ GstTestClockPrivate *priv;
- g_assert (GST_IS_TEST_CLOCK (test_clock));
+ g_return_if_fail (GST_IS_TEST_CLOCK (test_clock));
+
+ priv = GST_TEST_CLOCK_GET_PRIVATE (test_clock);
GST_OBJECT_LOCK (test_clock);
while (priv->entry_contexts == NULL)
g_cond_wait (&priv->entry_added_cond, GST_OBJECT_GET_LOCK (test_clock));
- g_assert (gst_test_clock_peek_next_pending_id_unlocked (test_clock,
- pending_id));
+ if (!gst_test_clock_peek_next_pending_id_unlocked (test_clock, pending_id))
+ g_assert_not_reached ();
GST_OBJECT_UNLOCK (test_clock);
}
@@ -808,9 +840,11 @@ void
gst_test_clock_wait_for_pending_id_count (GstTestClock * test_clock,
guint count)
{
- GstTestClockPrivate *priv = GST_TEST_CLOCK_GET_PRIVATE (test_clock);
+ GstTestClockPrivate *priv;
- g_assert (GST_IS_TEST_CLOCK (test_clock));
+ g_return_if_fail (GST_IS_TEST_CLOCK (test_clock));
+
+ priv = GST_TEST_CLOCK_GET_PRIVATE (test_clock);
GST_OBJECT_LOCK (test_clock);
@@ -835,12 +869,14 @@ gst_test_clock_wait_for_pending_id_count (GstTestClock * test_clock,
GstClockID
gst_test_clock_process_next_clock_id (GstTestClock * test_clock)
{
- GstTestClockPrivate *priv = GST_TEST_CLOCK_GET_PRIVATE (test_clock);
+ GstTestClockPrivate *priv;
GstClockID result = NULL;
GstClockEntryContext *ctx = NULL;
GList *cur;
- g_assert (GST_IS_TEST_CLOCK (test_clock));
+ g_return_val_if_fail (GST_IS_TEST_CLOCK (test_clock), NULL);
+
+ priv = GST_TEST_CLOCK_GET_PRIVATE (test_clock);
GST_OBJECT_LOCK (test_clock);
@@ -899,11 +935,13 @@ gst_test_clock_process_next_clock_id (GstTestClock * test_clock)
GstClockTime
gst_test_clock_get_next_entry_time (GstTestClock * test_clock)
{
- GstTestClockPrivate *priv = GST_TEST_CLOCK_GET_PRIVATE (test_clock);
+ GstTestClockPrivate *priv;
GstClockTime result = GST_CLOCK_TIME_NONE;
GList *imminent_clock_id;
- g_assert (GST_IS_TEST_CLOCK (test_clock));
+ g_return_val_if_fail (GST_IS_TEST_CLOCK (test_clock), GST_CLOCK_TIME_NONE);
+
+ priv = GST_TEST_CLOCK_GET_PRIVATE (test_clock);
GST_OBJECT_LOCK (test_clock);