mirror of
https://github.com/ipxe/ipxe
synced 2025-12-21 12:30:20 +03:00
[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>
This commit is contained in:
@@ -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 );
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user