gst/rtsp/gstrtspsrc.c: Prevent further read/write actions taken to the connect-failed...
author이문형 <iwings@gmail.com>
Thu, 27 Nov 2008 11:22:56 +0000 (11:22 +0000)
committerWim Taymans <wim.taymans@gmail.com>
Thu, 27 Nov 2008 11:22:56 +0000 (11:22 +0000)
Original commit message from CVS:
Patch by: 이문형 <iwings at gmail dot com>
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_loop_udp):
Prevent further read/write actions taken to the connect-failed socket by
erroring out quickly. See #562258.

ChangeLog
gst/rtsp/gstrtspsrc.c

index 5123a4c..3714c29 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2008-11-27  Wim Taymans  <wim.taymans@collabora.co.uk>
+
+       Patch by: 이문형 <iwings at gmail dot com>
+
+       * gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_loop_udp):
+       Prevent further read/write actions taken to the connect-failed socket by
+       erroring out quickly. See #562258.
+
 2008-11-26  Stefan Kost  <ensonic@users.sf.net>
 
        * tests/examples/level/level-example.c:
index 814cab8..6bc6fc3 100644 (file)
@@ -2914,7 +2914,10 @@ gst_rtspsrc_loop_udp (GstRTSPSrc * src)
           GST_ELEMENT_WARNING (src, RESOURCE, READ, (NULL),
               ("The server closed the connection."));
           gst_rtsp_connection_close (src->connection);
-          gst_rtsp_connection_connect (src->connection, src->ptcp_timeout);
+          res =
+              gst_rtsp_connection_connect (src->connection, src->ptcp_timeout);
+          if (res < 0)
+            goto connect_error;
           continue;
         default:
           goto receive_error;
@@ -3025,11 +3028,20 @@ handle_request_failed:
     g_free (str);
     return GST_FLOW_ERROR;
   }
+connect_error:
+  {
+    gchar *str = gst_rtsp_strresult (res);
+
+    GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ_WRITE, (NULL),
+        ("Could not connect to server. (%s)", str));
+    g_free (str);
+    return GST_FLOW_ERROR;
+  }
 no_protocols:
   {
     src->cur_protocols = 0;
     /* no transport possible, post an error and stop */
-    GST_ELEMENT_ERROR (src, RESOURCE, READ, (NULL),
+    GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ_WRITE, (NULL),
         ("Could not connect to server, no protocols left"));
     return GST_FLOW_ERROR;
   }