mirror of https://github.com/ipxe/ipxe.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 <robin@smidsrod.no> Signed-off-by: Michael Brown <mcb30@ipxe.org>pull/56/head
parent
aeb6203811
commit
5e2a7481ad
|
@ -81,12 +81,17 @@ int xfer_vredirect ( struct interface *intf, int type, va_list args ) {
|
||||||
* xfer_vreopen(), we create a temporary interface in
|
* xfer_vreopen(), we create a temporary interface in
|
||||||
* order to be able to send xfer_window_changed() to
|
* order to be able to send xfer_window_changed() to
|
||||||
* the parent.
|
* the parent.
|
||||||
|
*
|
||||||
|
* If redirection fails, then send intf_close() to the
|
||||||
|
* parent interface.
|
||||||
*/
|
*/
|
||||||
intf_plug ( &tmp, dest );
|
intf_plug ( &tmp, dest );
|
||||||
rc = xfer_vreopen ( dest, type, args );
|
rc = xfer_vreopen ( dest, type, args );
|
||||||
if ( rc == 0 ) {
|
if ( rc == 0 ) {
|
||||||
xfer_window_changed ( dest );
|
xfer_window_changed ( dest );
|
||||||
xfer_window_changed ( &tmp );
|
xfer_window_changed ( &tmp );
|
||||||
|
} else {
|
||||||
|
intf_close ( &tmp, rc );
|
||||||
}
|
}
|
||||||
intf_unplug ( &tmp );
|
intf_unplug ( &tmp );
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue