tcpserversrc: return FLOW_FLUSHING instead of an error when accept/select is canceled
authorMichael Olbrich <m.olbrich@pengutronix.de>
Thu, 12 Jun 2014 11:23:29 +0000 (13:23 +0200)
committerTim-Philipp Müller <tim@centricular.com>
Fri, 13 Jun 2014 08:19:49 +0000 (09:19 +0100)
Canceling the accept/select happens when the source is shut down. This is
not an error and the GST_FLOW_ERROR causes problems when only part of the
pipeline is shut down.

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

gst/tcp/gsttcpserversrc.c

index 141181d..4bd56af 100644 (file)
@@ -295,19 +295,27 @@ accept_error:
   {
     if (g_error_matches (err, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
       GST_DEBUG_OBJECT (src, "Cancelled accepting of client");
+      ret = GST_FLOW_FLUSHING;
     } else {
       GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ, (NULL),
           ("Failed to accept client: %s", err->message));
+      ret = GST_FLOW_ERROR;
     }
     g_clear_error (&err);
-    return GST_FLOW_ERROR;
+    return ret;
   }
 select_error:
   {
-    GST_ELEMENT_ERROR (src, RESOURCE, READ, (NULL),
-        ("Select failed: %s", err->message));
+    if (g_error_matches (err, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
+      GST_DEBUG_OBJECT (src, "Cancelled select");
+      ret = GST_FLOW_FLUSHING;
+    } else {
+      GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ, (NULL),
+          ("Select failed: %s", err->message));
+      ret = GST_FLOW_ERROR;
+    }
     g_clear_error (&err);
-    return GST_FLOW_ERROR;
+    return ret;
   }
 get_available_error:
   {