buffer: handle gst_buffer_map failures
[platform/upstream/gstreamer.git] / plugins / elements / gstdownloadbuffer.c
index 36455ac..1dea8a7 100644 (file)
@@ -780,7 +780,8 @@ gst_download_buffer_read_buffer (GstDownloadBuffer * dlbuf, guint64 offset,
   else
     buf = *buffer;
 
-  gst_buffer_map (buf, &info, GST_MAP_WRITE);
+  if (!gst_buffer_map (buf, &info, GST_MAP_WRITE))
+    goto map_failed;
 
   GST_DEBUG_OBJECT (dlbuf, "Reading %u bytes from %" G_GUINT64_FORMAT, length,
       offset);
@@ -835,6 +836,14 @@ hit_eos:
     GST_DEBUG_OBJECT (dlbuf, "EOS hit");
     return GST_FLOW_EOS;
   }
+map_failed:
+  {
+    GST_ELEMENT_ERROR (dlbuf, RESOURCE, BUSY,
+        (_("Failed to map buffer.")), ("failed to map buffer in WRITE mode"));
+    if (*buffer == NULL)
+      gst_buffer_unref (buf);
+    return GST_FLOW_ERROR;
+  }
 out_flushing:
   {
     GST_DEBUG_OBJECT (dlbuf, "we are flushing");
@@ -1163,7 +1172,8 @@ gst_download_buffer_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
         GST_BUFFER_OFFSET (buffer), offset);
   }
 
-  gst_buffer_map (buffer, &info, GST_MAP_READ);
+  if (!gst_buffer_map (buffer, &info, GST_MAP_READ))
+    goto map_error;
 
   GST_DEBUG_OBJECT (dlbuf, "Writing %" G_GSIZE_FORMAT " bytes to %"
       G_GUINT64_FORMAT, info.size, offset);
@@ -1248,6 +1258,14 @@ out_seeking:
     gst_buffer_unref (buffer);
     return GST_FLOW_OK;
   }
+map_error:
+  {
+    GST_DOWNLOAD_BUFFER_MUTEX_UNLOCK (dlbuf);
+    gst_buffer_unref (buffer);
+    GST_ELEMENT_ERROR (dlbuf, RESOURCE, BUSY,
+        (_("Failed to map buffer.")), ("failed to map buffer in READ mode"));
+    return GST_FLOW_ERROR;
+  }
 write_error:
   {
     GST_DOWNLOAD_BUFFER_MUTEX_UNLOCK (dlbuf);