summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Radizi <patrick.radizi at axis.com>2009-10-12 15:48:46 +0200
committerWim Taymans <wim.taymans@collabora.co.uk>2009-10-12 15:48:46 +0200
commit48a44f470b8aede9010cc09a074dab165c5f576a (patch)
treea17dbdde371d0b795b731de27c220838845b1d6b
parent5dbaccabca12f36f994592026f8542711b8526fd (diff)
rtsp: handle socket errors
gstrtspconnection.c:gst_rtsp_connection_receive() can hang when an error occured on a socekt. Fix this problem by checking for error on 'other' socket after poll return. Fixes #596159
-rw-r--r--gst-libs/gst/rtsp/gstrtspconnection.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/gst-libs/gst/rtsp/gstrtspconnection.c b/gst-libs/gst/rtsp/gstrtspconnection.c
index 088a67e7f..19202a2c9 100644
--- a/gst-libs/gst/rtsp/gstrtspconnection.c
+++ b/gst-libs/gst/rtsp/gstrtspconnection.c
@@ -1337,6 +1337,10 @@ gst_rtsp_connection_write (GstRTSPConnection * conn, const guint8 * data,
else
goto select_error;
}
+
+ /* could also be an error with read socket */
+ if (gst_poll_fd_has_error (conn->fdset, conn->readfd))
+ goto socket_error;
}
return GST_RTSP_OK;
@@ -1353,6 +1357,10 @@ stopped:
{
return GST_RTSP_EINTR;
}
+socket_error:
+ {
+ return GST_RTSP_ENET;
+ }
write_error:
{
return res;
@@ -2050,6 +2058,11 @@ gst_rtsp_connection_read (GstRTSPConnection * conn, guint8 * data, guint size,
else
goto select_error;
}
+
+ /* could also be an error with write socket */
+ if (gst_poll_fd_has_error (conn->fdset, conn->writefd))
+ goto socket_error;
+
gst_poll_set_controllable (conn->fdset, FALSE);
}
return GST_RTSP_OK;
@@ -2071,6 +2084,10 @@ eof:
{
return GST_RTSP_EEOF;
}
+socket_error:
+ {
+ res = GST_RTSP_ENET;
+ }
read_error:
{
return res;
@@ -2204,6 +2221,11 @@ gst_rtsp_connection_receive (GstRTSPConnection * conn, GstRTSPMessage * message,
else
goto select_error;
}
+
+ /* could also be an error with write socket */
+ if (gst_poll_fd_has_error (conn->fdset, conn->writefd))
+ goto socket_error;
+
gst_poll_set_controllable (conn->fdset, FALSE);
}
@@ -2233,6 +2255,11 @@ eof:
res = GST_RTSP_EEOF;
goto cleanup;
}
+socket_error:
+ {
+ res = GST_RTSP_ENET;
+ goto cleanup;
+ }
read_error:
cleanup:
{