From b12412ed17a9461c29f274a8448236ee057d3122 Mon Sep 17 00:00:00 2001 From: Simmo Saan Date: Fri, 5 Feb 2016 13:44:14 +0200 Subject: [PATCH] xfer: ignore signals when polling socket during file receive (closes #677) When signals (e.g. SIGWINCH for terminal resize) are fired they cause poll to fail with EINTR, erroring file receival even when there wasn't a problem with it. This patch adds additional checks for EINTR and EAGAIN that cause retry of poll, since both are unrelated to actual file receival. --- src/plugins/xfer/xfer-dcc.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/plugins/xfer/xfer-dcc.c b/src/plugins/xfer/xfer-dcc.c index 4ea5e43bf..24821d7e1 100644 --- a/src/plugins/xfer/xfer-dcc.c +++ b/src/plugins/xfer/xfer-dcc.c @@ -368,9 +368,14 @@ xfer_dcc_recv_file_child (struct t_xfer *xfer) ready = poll (&poll_fd, 1, -1); if (ready <= 0) { - xfer_network_write_pipe (xfer, XFER_STATUS_FAILED, - XFER_ERROR_RECV_BLOCK); - return; + if ((errno == EINTR) || (errno == EAGAIN)) + continue; + else + { + xfer_network_write_pipe (xfer, XFER_STATUS_FAILED, + XFER_ERROR_RECV_BLOCK); + return; + } } /* read maximum data on socket (until nothing is available) */