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
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;
{
return GST_RTSP_EINTR;
}
+socket_error:
+ {
+ return GST_RTSP_ENET;
+ }
write_error:
{
return res;
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;
{
return GST_RTSP_EEOF;
}
+socket_error:
+ {
+ res = GST_RTSP_ENET;
+ }
read_error:
{
return res;
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);
}
res = GST_RTSP_EEOF;
goto cleanup;
}
+socket_error:
+ {
+ res = GST_RTSP_ENET;
+ goto cleanup;
+ }
read_error:
cleanup:
{