diff options
author | Patrick Radizi <patrick.radizi at axis.com> | 2009-10-12 15:48:46 +0200 |
---|---|---|
committer | Wim Taymans <wim.taymans@collabora.co.uk> | 2009-10-12 15:48:46 +0200 |
commit | 48a44f470b8aede9010cc09a074dab165c5f576a (patch) | |
tree | a17dbdde371d0b795b731de27c220838845b1d6b | |
parent | 5dbaccabca12f36f994592026f8542711b8526fd (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.c | 27 |
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: { |