From 33924a7f0426f2d86dd774899128b89d6a69b423 Mon Sep 17 00:00:00 2001 From: Thibault Saunier Date: Sat, 16 May 2015 12:57:12 +0200 Subject: [PATCH] timedvaluecontrolsource: Check that the only iter is the end iter in the GSequence Previous patch was assuming that if the returned iter was the last iter the GSequence was empty, which is obviously wrong. --- libs/gst/controller/gsttimedvaluecontrolsource.c | 25 +++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/libs/gst/controller/gsttimedvaluecontrolsource.c b/libs/gst/controller/gsttimedvaluecontrolsource.c index eb956ff..627ac3f 100644 --- a/libs/gst/controller/gsttimedvaluecontrolsource.c +++ b/libs/gst/controller/gsttimedvaluecontrolsource.c @@ -182,21 +182,24 @@ gst_timed_value_control_source_set_internal (GstTimedValueControlSource * iter = g_sequence_search (self->values, ×tamp, (GCompareDataFunc) gst_control_point_find, NULL); - if (iter && !g_sequence_iter_is_end (iter)) { + if (iter) { GSequenceIter *prev = g_sequence_iter_prev (iter); - GstControlPoint *cp = g_sequence_get (prev); - /* If the timestamp is the same just update the control point value */ - if (cp->timestamp == timestamp) { + if (!g_sequence_iter_is_end (prev)) { + GstControlPoint *cp = g_sequence_get (prev); - /* update control point */ - cp->value = value; - g_mutex_unlock (&self->lock); + /* If the timestamp is the same just update the control point value */ + if (cp->timestamp == timestamp) { - g_signal_emit (self, - gst_timed_value_control_source_signals[VALUE_CHANGED_SIGNAL], 0, - cp); - goto done; + /* update control point */ + cp->value = value; + g_mutex_unlock (&self->lock); + + g_signal_emit (self, + gst_timed_value_control_source_signals[VALUE_CHANGED_SIGNAL], 0, + cp); + goto done; + } } } } else { -- 2.7.4