bin: Fix iterator resync'ing
authorEdward Hervey <edward@centricular.com>
Sat, 8 Oct 2016 15:23:08 +0000 (17:23 +0200)
committerEdward Hervey <bilboed@bilboed.com>
Sat, 8 Oct 2016 15:23:08 +0000 (17:23 +0200)
When we get GST_ITERATOR_RESYNC, we need to call gst_iterator_resync()
otherwise we will always get GST_ITERATOR_RESYNC (and that loop would
run forever).

gst/gstbin.c

index 820488b001ca7b0f4344f842fc13f12a29404d4a..a64db779b81f18211430f459febc09c596983247 100644 (file)
@@ -3109,10 +3109,13 @@ undo:
       GST_DEBUG_OBJECT (element,
           "Bin failed to change state, switching children back to %s",
           gst_element_state_get_name (current));
-      do {
+      while (TRUE) {
         ret =
             gst_iterator_foreach (it, &reset_state, GINT_TO_POINTER (current));
-      } while (ret == GST_ITERATOR_RESYNC);
+        if (ret != GST_ITERATOR_RESYNC)
+          break;
+        gst_iterator_resync (it);
+      }
       gst_iterator_free (it);
     }
     goto done;