mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-17 11:45:25 +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
388f0ec069
commit
f8dd5550c2
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