diff options
author | Wim Taymans <wim.taymans@collabora.co.uk> | 2010-03-25 18:43:04 +0100 |
---|---|---|
committer | Wim Taymans <wim.taymans@collabora.co.uk> | 2010-03-25 18:43:04 +0100 |
commit | b9ce2133dc5327ceee8ffeca6e1878890806e26e (patch) | |
tree | c70a2f73422fc5a6b20754dc9855e87ca1a1cd6a | |
parent | 0b1beba01dd378247093d87834623e66028a355d (diff) |
queue2: handle write errors
Handle write errors to the temporary download file and post errors when
something went wrong.
-rw-r--r-- | plugins/elements/gstqueue2.c | 30 |
1 files changed, 23 insertions, 7 deletions
diff --git a/plugins/elements/gstqueue2.c b/plugins/elements/gstqueue2.c index e1c1130e6d..9cfed25398 100644 --- a/plugins/elements/gstqueue2.c +++ b/plugins/elements/gstqueue2.c @@ -901,12 +901,11 @@ update_cur_level (GstQueue2 * queue, GstQueue2Range * range) queue->cur_level.bytes = 0; } -static void +static gboolean gst_queue2_write_buffer_to_file (GstQueue2 * queue, GstBuffer * buffer) { guint size; guint8 *data; - int ret; guint64 writing_pos, max_reading_pos; GstQueue2Range *next; @@ -924,11 +923,9 @@ gst_queue2_write_buffer_to_file (GstQueue2 * queue, GstBuffer * buffer) data = GST_BUFFER_DATA (buffer); size = GST_BUFFER_SIZE (buffer); - ret = fwrite (data, 1, size, queue->temp_file); - if (ret < size) { - /* FIXME do something useful here */ - GST_ERROR_OBJECT (queue, "fwrite returned error"); - } + if (fwrite (data, size, 1, queue->temp_file) != 1) + goto handle_error; + writing_pos += size; GST_INFO_OBJECT (queue, @@ -960,6 +957,25 @@ gst_queue2_write_buffer_to_file (GstQueue2 * queue, GstBuffer * buffer) debug_ranges (queue); } queue->current->writing_pos = writing_pos; + + return TRUE; + + /* ERRORS */ +handle_error: + { + switch (errno) { + case ENOSPC:{ + GST_ELEMENT_ERROR (queue, RESOURCE, NO_SPACE_LEFT, (NULL), (NULL)); + break; + } + default:{ + GST_ELEMENT_ERROR (queue, RESOURCE, WRITE, + (_("Error while writing to download file.")), + ("%s", g_strerror (errno))); + } + } + return FALSE; + } } static void |