timedvaluecontrolsource: Check that the only iter is the end iter in the GSequence
authorThibault Saunier <tsaunier@gnome.org>
Sat, 16 May 2015 10:57:12 +0000 (12:57 +0200)
committerThibault Saunier <tsaunier@gnome.org>
Sat, 16 May 2015 11:08:06 +0000 (13:08 +0200)
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

index eb956ff..627ac3f 100644 (file)
@@ -182,21 +182,24 @@ gst_timed_value_control_source_set_internal (GstTimedValueControlSource *
     iter =
         g_sequence_search (self->values, &timestamp,
         (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 {