diff --git a/ChangeLog b/ChangeLog
index ecca23c2c4..2864a91eb7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2005-11-23  Wim Taymans  <wim@fluendo.com>
+
+	* gst-libs/gst/audio/gstringbuffer.c: (gst_ring_buffer_read):
+	If we are reading too slowly, jump forward in the ringbuffer
+	instead of blocking.
+
 2005-11-23  Jan Schmidt  <thaytan@mad.scientist.com>
 
 	* ext/libvisual/visual.c: (gst_visual_src_setcaps), (get_buffer),
diff --git a/gst-libs/gst/audio/gstringbuffer.c b/gst-libs/gst/audio/gstringbuffer.c
index 2d3380a743..0ac8c08b40 100644
--- a/gst-libs/gst/audio/gstringbuffer.c
+++ b/gst-libs/gst/audio/gstringbuffer.c
@@ -1183,6 +1183,12 @@ gst_ring_buffer_read (GstRingBuffer * buf, guint64 sample, guchar * data,
       if (diff > 0 && diff < segtotal)
         break;
 
+      /* flush if diff has grown bigger than ringbuffer */
+      if (diff >= segtotal) {
+        gst_ring_buffer_clear_all (buf);
+        buf->segdone = readseg;
+      }
+
       /* else we need to wait for the segment to become readable. */
       if (!wait_segment (buf))
         goto not_started;