[iobuf] Add iob_disown() and use it where it simplifies code
authorMichael Brown <mcb30@etherboot.org>
Sun, 1 Feb 2009 18:02:28 +0000 (18:02 +0000)
committerMichael Brown <mcb30@etherboot.org>
Sun, 1 Feb 2009 20:16:10 +0000 (20:16 +0000)
commitdbe84c5aad583a4194666d2d925a5cda53852631
tree401417d56c1f4108345c1489d40c68bf6c098cf7
parent017109821234608d842a7999eef76545299ff2a4
[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.
src/arch/i386/drivers/net/undinet.c
src/include/gpxe/iobuf.h
src/interface/efi/efi_snp.c
src/net/arp.c
src/net/tcp/http.c
src/net/udp.c
src/net/udp/dhcp.c
src/net/udp/tftp.c