mirror of
https://github.com/xcat2/xNBA.git
synced 2025-02-07 06:21:52 +00:00
[xfer] Send xfer_window_changed() after xfer_vredirect()
Modify the default action for xfer_vredirect() to automatically send xfer_window_changed() messages to both the new child and the parent interfaces. This will allow the elimination of processes that simply poll on xfer_window() to determine when a redirection has completed successfully. Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
parent
c68bf14559
commit
ba3633782b
@ -54,6 +54,7 @@ static struct xfer_metadata dummy_metadata;
|
||||
* @ret rc Return status code
|
||||
*/
|
||||
int xfer_vredirect ( struct interface *intf, int type, va_list args ) {
|
||||
struct interface tmp = INTF_INIT ( null_intf_desc );
|
||||
struct interface *dest;
|
||||
xfer_vredirect_TYPE ( void * ) *op =
|
||||
intf_get_dest_op_no_passthru ( intf, xfer_vredirect, &dest );
|
||||
@ -66,8 +67,22 @@ int xfer_vredirect ( struct interface *intf, int type, va_list args ) {
|
||||
if ( op ) {
|
||||
rc = op ( object, type, args );
|
||||
} else {
|
||||
/* Default is to reopen the interface as instructed */
|
||||
/* Default is to reopen the interface as instructed,
|
||||
* then send xfer_window_changed() messages to both
|
||||
* new child and parent interfaces. Since our
|
||||
* original child interface is likely to be closed and
|
||||
* unplugged as a result of the call to
|
||||
* xfer_vreopen(), we create a temporary interface in
|
||||
* order to be able to send xfer_window_changed() to
|
||||
* the parent.
|
||||
*/
|
||||
intf_plug ( &tmp, dest );
|
||||
rc = xfer_vreopen ( dest, type, args );
|
||||
if ( rc == 0 ) {
|
||||
xfer_window_changed ( dest );
|
||||
xfer_window_changed ( &tmp );
|
||||
}
|
||||
intf_unplug ( &tmp );
|
||||
}
|
||||
|
||||
if ( rc != 0 ) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user