diff --git a/src/core/open.c b/src/core/open.c index d5eb30cf..70b427ba 100644 --- a/src/core/open.c +++ b/src/core/open.c @@ -188,15 +188,10 @@ int xfer_open ( struct xfer_interface *xfer, int type, ... ) { * method handler. */ int xfer_vreopen ( struct xfer_interface *xfer, int type, va_list args ) { - struct xfer_interface_operations *op = xfer->op; /* Close existing connection */ - xfer_nullify ( xfer ); xfer_close ( xfer, 0 ); - /* Restore to operational status */ - xfer->op = op; - /* Open new location */ return xfer_vopen ( xfer, type, args ); } diff --git a/src/core/xfer.c b/src/core/xfer.c index a9bcb4d7..1ec6f9d3 100644 --- a/src/core/xfer.c +++ b/src/core/xfer.c @@ -45,11 +45,14 @@ static struct xfer_metadata dummy_metadata; */ void xfer_close ( struct xfer_interface *xfer, int rc ) { struct xfer_interface *dest = xfer_get_dest ( xfer ); + struct xfer_interface_operations *op = xfer->op; DBGC ( xfer, "XFER %p->%p close\n", xfer, dest ); xfer_unplug ( xfer ); + xfer_nullify ( xfer ); dest->op->close ( dest, rc ); + xfer->op = op; xfer_put ( dest ); }