diff options
author | Wim Taymans <wim.taymans@collabora.co.uk> | 2009-04-09 14:38:17 +0200 |
---|---|---|
committer | Wim Taymans <wim.taymans@collabora.co.uk> | 2009-04-09 17:26:20 +0200 |
commit | d849340e64da653d3f18d04713902d90c3d555b8 (patch) | |
tree | 5476edd55b53ee730c969e20cf80afc345ecd30f /ext | |
parent | 81c5fb9e48fd08b463015e9dd91aebc58b5c4f03 (diff) |
pulsesink: handle write errors
Diffstat (limited to 'ext')
-rw-r--r-- | ext/pulse/pulsesink.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/ext/pulse/pulsesink.c b/ext/pulse/pulsesink.c index 1e65bd89..be3da445 100644 --- a/ext/pulse/pulsesink.c +++ b/ext/pulse/pulsesink.c @@ -480,7 +480,7 @@ gst_pulsering_underflow_cb (pa_stream * s, void *userdata) pbuf = GST_PULSERING_BUFFER_CAST (userdata); psink = GST_PULSESINK_CAST (GST_OBJECT_PARENT (pbuf)); - GST_LOG_OBJECT (psink, "got underflow"); + GST_WARNING_OBJECT (psink, "got underflow"); if ((avail = pa_stream_writable_size (pbuf->stream)) > 0) { guint segsize, towrite; @@ -493,11 +493,22 @@ gst_pulsering_underflow_cb (pa_stream * s, void *userdata) while (avail > 0) { towrite = MIN (avail, segsize); - pa_stream_write (pbuf->stream, rbuf->empty_seg, towrite, - NULL, 0, PA_SEEK_RELATIVE); + if (pa_stream_write (pbuf->stream, rbuf->empty_seg, towrite, + NULL, 0, PA_SEEK_RELATIVE) < 0) + goto write_failed; avail -= towrite; } } + return; + + /* ERRORS */ +write_failed: + { + GST_ELEMENT_ERROR (psink, RESOURCE, FAILED, + ("pa_stream_write() failed: %s", + pa_strerror (pa_context_errno (pbuf->context))), (NULL)); + return; + } } static void |