From 5e2a7481ada168ab8b5f58bbe099ef51b7b09098 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Mon, 4 Jul 2016 16:10:45 +0100 Subject: [PATCH] [xfer] Send intf_close() if redirection fails MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A redirection failure is fatal, but provides no opportunity for the caller of xfer_[v]redirect() to report the failure since the interface will already have been disconnected. Fix by sending intf_close() from within the default xfer_vredirect() handler. Debugged-by: Robin Smidsrød Signed-off-by: Michael Brown --- src/core/xfer.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/core/xfer.c b/src/core/xfer.c index 112fee1bf..3a2f174d0 100644 --- a/src/core/xfer.c +++ b/src/core/xfer.c @@ -81,12 +81,17 @@ int xfer_vredirect ( struct interface *intf, int type, va_list args ) { * xfer_vreopen(), we create a temporary interface in * order to be able to send xfer_window_changed() to * the parent. + * + * If redirection fails, then send intf_close() to the + * parent interface. */ intf_plug ( &tmp, dest ); rc = xfer_vreopen ( dest, type, args ); if ( rc == 0 ) { xfer_window_changed ( dest ); xfer_window_changed ( &tmp ); + } else { + intf_close ( &tmp, rc ); } intf_unplug ( &tmp ); }