From 3be828e91c619be5694840e61121861a8be42843 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Mon, 18 Nov 2013 21:39:54 +0100 Subject: [PATCH 2/2] 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 4109192..51a04d2 100644 --- a/gst/gstpluginloader.c +++ b/gst/gstpluginloader.c @@ -996,27 +996,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_r)) { - 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); -- 1.8.1.2