diff options
| author | Michael Brown | 2009-02-01 19:02:28 +0100 |
|---|---|---|
| committer | Michael Brown | 2009-02-01 21:16:10 +0100 |
| commit | dbe84c5aad583a4194666d2d925a5cda53852631 (patch) | |
| tree | 401417d56c1f4108345c1489d40c68bf6c098cf7 /src/net/udp/dhcp.c | |
| parent | [contrib] Update qemu documentation (diff) | |
| download | ipxe-dbe84c5aad583a4194666d2d925a5cda53852631.tar.gz ipxe-dbe84c5aad583a4194666d2d925a5cda53852631.tar.xz ipxe-dbe84c5aad583a4194666d2d925a5cda53852631.zip | |
[iobuf] Add iob_disown() and use it where it simplifies code
There are many functions that take ownership of the I/O buffer they
are passed as a parameter. The caller should not retain a pointer to
the I/O buffer. Use iob_disown() to automatically nullify the
caller's pointer, e.g.:
xfer_deliver_iob ( xfer, iob_disown ( iobuf ) );
This will ensure that iobuf is set to NULL for any code after the call
to xfer_deliver_iob().
iob_disown() is currently used only in places where it simplifies the
code, by avoiding an extra line explicitly setting the I/O buffer
pointer to NULL. It should ideally be used with each call to any
function that takes ownership of an I/O buffer. (The SSA
optimisations will ensure that use of iob_disown() gets optimised away
in cases where the caller makes no further use of the I/O buffer
pointer anyway.)
If gcc ever introduces an __attribute__((free)), indicating that use
of a function argument after a function call should generate a
warning, then we should use this to identify all applicable function
call sites, and add iob_disown() as necessary.
Diffstat (limited to 'src/net/udp/dhcp.c')
| -rw-r--r-- | src/net/udp/dhcp.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/src/net/udp/dhcp.c b/src/net/udp/dhcp.c index 26c501727..6ebf60217 100644 --- a/src/net/udp/dhcp.c +++ b/src/net/udp/dhcp.c @@ -976,9 +976,8 @@ static int dhcp_tx ( struct dhcp_session *dhcp ) { /* Transmit the packet */ iob_put ( iobuf, dhcppkt.len ); - rc = xfer_deliver_iob_meta ( &dhcp->xfer, iobuf, &meta ); - iobuf = NULL; - if ( rc != 0 ) { + if ( ( rc = xfer_deliver_iob_meta ( &dhcp->xfer, iob_disown ( iobuf ), + &meta ) ) != 0 ) { DBGC ( dhcp, "DHCP %p could not transmit UDP packet: %s\n", dhcp, strerror ( rc ) ); goto done; |
