From 3be828e91c619be5694840e61121861a8be42843 Mon Sep 17 00:00:00 2001
From: Wim Taymans <wim.taymans@gmail.com>
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