if ( ! iobuf ) {
DBGC ( slam, "SLAM %p could not allocate I/O buffer\n",
slam );
- return -ENOMEM;
+ rc = -ENOMEM;
+ goto err_alloc;
}
/* Construct NACK. We always request only a single packet;
"0-%ld\n", slam, ( num_blocks - 1 ) );
}
if ( ( rc = slam_put_value ( slam, iobuf, first_block ) ) != 0 )
- return rc;
+ goto err_put_value;
if ( ( rc = slam_put_value ( slam, iobuf, num_blocks ) ) != 0 )
- return rc;
+ goto err_put_value;
nul = iob_put ( iobuf, 1 );
*nul = 0;
/* Transmit packet */
- return xfer_deliver_iob ( &slam->socket, iobuf );
+ return xfer_deliver_iob ( &slam->socket, iob_disown ( iobuf ) );
+
+ err_put_value:
+ free_iob ( iobuf );
+ err_alloc:
+ return rc;
}
/**