* @v rc Reason for close
*/
void xfer_close ( struct xfer_interface *xfer, int rc ) {
- struct xfer_interface *dest = xfer_dest ( xfer );
+ struct xfer_interface *dest = xfer_get_dest ( xfer );
dest->op->close ( dest, rc );
xfer_unplug ( xfer );
+ xfer_put ( dest );
}
/**
* @ret rc Return status code
*/
int xfer_vredirect ( struct xfer_interface *xfer, int type, va_list args ) {
- struct xfer_interface *dest = xfer_dest ( xfer );
+ struct xfer_interface *dest = xfer_get_dest ( xfer );
+ int rc;
- return dest->op->vredirect ( dest, type, args );
+ rc = dest->op->vredirect ( dest, type, args );
+ xfer_put ( dest );
+ return rc;
}
/**
*/
int xfer_request ( struct xfer_interface *xfer, off_t offset, int whence,
size_t len ) {
- struct xfer_interface *dest = xfer_dest ( xfer );
+ struct xfer_interface *dest = xfer_get_dest ( xfer );
+ int rc;
- return dest->op->request ( dest, offset, whence, len );
+ rc = dest->op->request ( dest, offset, whence, len );
+ xfer_put ( dest );
+ return rc;
}
/**
* @ret rc Return status code
*/
int xfer_seek ( struct xfer_interface *xfer, off_t offset, int whence ) {
- struct xfer_interface *dest = xfer_dest ( xfer );
+ struct xfer_interface *dest = xfer_get_dest ( xfer );
+ int rc;
- return dest->op->seek ( dest, offset, whence );
+ rc = dest->op->seek ( dest, offset, whence );
+ xfer_put ( dest );
+ return rc;
}
/**
* @ret iobuf I/O buffer
*/
struct io_buffer * xfer_alloc_iob ( struct xfer_interface *xfer, size_t len ) {
- struct xfer_interface *dest = xfer_dest ( xfer );
+ struct xfer_interface *dest = xfer_get_dest ( xfer );
+ struct io_buffer *iobuf;
- return dest->op->alloc_iob ( dest, len );
+ iobuf = dest->op->alloc_iob ( dest, len );
+ xfer_put ( dest );
+ return iobuf;
}
/**
* @ret rc Return status code
*/
int xfer_deliver_iob ( struct xfer_interface *xfer, struct io_buffer *iobuf ) {
- struct xfer_interface *dest = xfer_dest ( xfer );
+ struct xfer_interface *dest = xfer_get_dest ( xfer );
+ int rc;
- return dest->op->deliver_iob ( dest, iobuf );
+ rc = dest->op->deliver_iob ( dest, iobuf );
+ xfer_put ( dest );
+ return rc;
}
/**
*/
int xfer_deliver_raw ( struct xfer_interface *xfer,
const void *data, size_t len ) {
- struct xfer_interface *dest = xfer_dest ( xfer );
+ struct xfer_interface *dest = xfer_get_dest ( xfer );
+ int rc;
- return dest->op->deliver_raw ( dest, data, len );
+ rc = dest->op->deliver_raw ( dest, data, len );
+ xfer_put ( dest );
+ return rc;
}
/****************************************************************************