curlsink: catch an unknown error
authorPatricia Muscalu <patricia@axis.com>
Tue, 8 Sep 2015 12:37:57 +0000 (14:37 +0200)
committerTim-Philipp Müller <tim@centricular.com>
Mon, 4 Apr 2016 16:48:55 +0000 (17:48 +0100)
In this case the socket callback has not been called
by libcurl and the curlsink has not been notified about any
connection problems by libcurl.
This indicates that it's a bug in libcurl so catch it as
an unknown error.

https://bugzilla.gnome.org/show_bug.cgi?id=754432

ext/curl/gstcurlbasesink.c

index 575c241..5728ab2 100644 (file)
@@ -980,6 +980,15 @@ handle_transfer (GstCurlBaseSink * sink)
 
   GST_OBJECT_LOCK (sink);
   if (sink->socket_type == CURLSOCKTYPE_ACCEPT) {
+    /* FIXME: remove this again once we can depend on libcurl > 7.44.0,
+     * see https://github.com/bagder/curl/issues/405.
+     */
+    if (G_UNLIKELY (sink->fd.fd < 0)) {
+      sink->error = g_strdup_printf ("unknown error");
+      retval = GST_FLOW_ERROR;
+      GST_OBJECT_UNLOCK (sink);
+      goto fail;
+    }
     if (!gst_poll_remove_fd (sink->fdset, &sink->fd)) {
       sink->error = g_strdup_printf ("failed to remove fd");
       retval = GST_FLOW_ERROR;