iterator: If the iterator resync in find_custom() just retry
authorSebastian Dröge <sebastian.droege@collabora.co.uk>
Sun, 13 Jun 2010 09:24:10 +0000 (11:24 +0200)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Sun, 13 Jun 2010 09:25:53 +0000 (11:25 +0200)
gst/gstiterator.c

index 8cb9f01..43d9b3f 100644 (file)
@@ -634,8 +634,7 @@ find_custom_fold_func (gpointer item, GValue * ret, FindCustomFoldData * data)
  *
  * The iterator will not be freed.
  *
- * This function will return NULL if an error or resync happened to
- * the iterator.
+ * This function will return NULL if an error happened to the iterator.
  *
  * Returns: The element in the iterator that matches the compare
  * function or NULL when no element matched.
@@ -654,11 +653,11 @@ gst_iterator_find_custom (GstIterator * it, GCompareFunc func,
   data.func = func;
   data.user_data = user_data;
 
-  /* FIXME, we totally ignore RESYNC and return NULL so that the
-   * app does not know if the element was not found or a resync happened */
-  res =
-      gst_iterator_fold (it, (GstIteratorFoldFunction) find_custom_fold_func,
-      &ret, &data);
+  do {
+    res =
+        gst_iterator_fold (it, (GstIteratorFoldFunction) find_custom_fold_func,
+        &ret, &data);
+  } while (res == GST_ITERATOR_RESYNC);
 
   /* no need to unset, it's just a pointer */
   return g_value_get_pointer (&ret);