From b5b60ea33dc48a297515f95ac19cca20bb39edd1 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Tue, 4 Jul 2023 16:50:03 +0100 Subject: [interface] Fix debug message values for temporary interfaces The interface debug message values constructed by INTF_DBG() et al rely on the interface being embedded within a containing object. This assumption is not valid for the temporary outbound-only interfaces constructed on the stack by intf_shutdown() and xfer_vredirect(). Formalise the notion of a temporary outbound-only interface as having a NULL interface descriptor, and overload the "original interface descriptor" field to contain a pointer to the original interface that the temporary interface is shadowing. Originally-fixed-by: Vincent Fazio Signed-off-by: Michael Brown --- src/core/xfer.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/core/xfer.c') diff --git a/src/core/xfer.c b/src/core/xfer.c index 0faf3292a..269359e15 100644 --- a/src/core/xfer.c +++ b/src/core/xfer.c @@ -60,7 +60,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 tmp; struct interface *dest; xfer_vredirect_TYPE ( void * ) *op = intf_get_dest_op_no_passthru ( intf, xfer_vredirect, &dest ); @@ -85,6 +85,7 @@ int xfer_vredirect ( struct interface *intf, int type, va_list args ) { * If redirection fails, then send intf_close() to the * parent interface. */ + intf_temp_init ( &tmp, intf ); intf_plug ( &tmp, dest ); rc = xfer_vreopen ( dest, type, args ); if ( rc == 0 ) { -- cgit v1.2.3-55-g7522