mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-15 22:01:27 +00:00
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:
parent
366f80f4a3
commit
5c982f6113
1 changed files with 10 additions and 6 deletions
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue