From: Michael Brown Date: Mon, 4 Jul 2016 15:10:45 +0000 (+0100) Subject: [xfer] Send intf_close() if redirection fails X-Git-Tag: v1.20.1~405 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5e2a7481ada168ab8b5f58bbe099ef51b7b09098;p=thirdparty%2Fipxe.git [xfer] Send intf_close() if redirection fails 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 --- 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 ); }