From f8dd5550c2da2c0eacb36f04c237e39f6ad5b83d Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Mon, 18 Nov 2013 21:39:54 +0100 Subject: [PATCH] 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. --- gst/gstpluginloader.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/gst/gstpluginloader.c b/gst/gstpluginloader.c index d33dc69..13a8fd5 100644 --- a/gst/gstpluginloader.c +++ b/gst/gstpluginloader.c @@ -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); -- 2.7.4