wpesrc: Don't crash if WPE doesn't generate a buffer.
authorJan Schmidt <jan@centricular.com>
Mon, 24 Aug 2020 15:57:55 +0000 (01:57 +1000)
committerGStreamer Merge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Mon, 21 Sep 2020 16:39:57 +0000 (16:39 +0000)
On creating a 2nd wpesrc in a new pipeline in an app that already
has a runnig wpesrc, WPE sometimes doesn't return a buffer on request,
leading to a crash. This commit fixes the crash, but not the underlying
failure - a 2nd wpesrc can still error out instead.

Partially fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/1386

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1568>

ext/wpe/gstwpesrc.cpp

index 9e81ab1..970c742 100644 (file)
@@ -169,11 +169,13 @@ gst_wpe_src_create (GstBaseSrc * bsrc, guint64 offset, guint length, GstBuffer *
   }
 
   locked_buffer = src->view->buffer ();
-
-  if (locked_buffer != NULL) {
-    *buf = gst_buffer_copy_deep (locked_buffer);
-    ret = GST_FLOW_OK;
+  if (locked_buffer == NULL) {
+    GST_OBJECT_UNLOCK (src);
+    GST_ELEMENT_ERROR (src, RESOURCE, FAILED,
+        ("WPE View did not render a buffer"), (NULL));
+    return ret;
   }
+  *buf = gst_buffer_copy_deep (locked_buffer);
 
   g_object_get(gl_src, "timestamp-offset", &ts_offset, NULL);
 
@@ -195,6 +197,7 @@ gst_wpe_src_create (GstBaseSrc * bsrc, guint64 offset, guint length, GstBuffer *
 
   gl_src->running_time = next_time;
 
+  ret = GST_FLOW_OK;
   GST_OBJECT_UNLOCK (src);
   return ret;
 }