pluginloader: check read/write before closed

first try to read or write on the socket before checking the closed state. This
makes sure we handle all data on the socket before erroring out.
This commit is contained in:
Wim Taymans 2013-11-18 21:39:54 +01:00 committed by Wim Taymans
parent 366f80f4a3
commit 5c982f6113

View file

@ -997,27 +997,31 @@ exchange_packets (GstPluginLoader * l)
l->tx_buf_write - l->tx_buf_read);
if (!l->rx_done) {
if (gst_poll_fd_has_error (l->fdset, &l->fd_r) ||
gst_poll_fd_has_closed (l->fdset, &l->fd_r)) {
GST_LOG ("read fd %d closed/errored", l->fd_r.fd);
if (gst_poll_fd_has_error (l->fdset, &l->fd_r)) {
GST_LOG ("read fd %d errored", l->fd_r.fd);
goto fail_and_cleanup;
}
if (gst_poll_fd_can_read (l->fdset, &l->fd_r)) {
if (!read_one (l))
goto fail_and_cleanup;
} else if (gst_poll_fd_has_closed (l->fdset, &l->fd_r)) {
GST_LOG ("read fd %d closed", l->fd_r.fd);
goto fail_and_cleanup;
}
}
if (l->tx_buf_read < l->tx_buf_write) {
if (gst_poll_fd_has_error (l->fdset, &l->fd_w) ||
gst_poll_fd_has_closed (l->fdset, &l->fd_w)) {
GST_ERROR ("write fd %d closed/errored", l->fd_w.fd);
if (gst_poll_fd_has_error (l->fdset, &l->fd_w)) {
GST_ERROR ("write fd %d errored", l->fd_w.fd);
goto fail_and_cleanup;
}
if (gst_poll_fd_can_write (l->fdset, &l->fd_w)) {
if (!write_one (l))
goto fail_and_cleanup;
} else if (gst_poll_fd_has_closed (l->fdset, &l->fd_w)) {
GST_LOG ("write fd %d closed", l->fd_w.fd);
goto fail_and_cleanup;
}
}
} while (l->tx_buf_read < l->tx_buf_write);