summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWim Taymans <wim.taymans@collabora.co.uk>2010-03-25 18:43:04 +0100
committerWim Taymans <wim.taymans@collabora.co.uk>2010-03-25 18:43:04 +0100
commitb9ce2133dc5327ceee8ffeca6e1878890806e26e (patch)
treec70a2f73422fc5a6b20754dc9855e87ca1a1cd6a
parent0b1beba01dd378247093d87834623e66028a355d (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.c30
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