On Tue, Dec 23, 2014 at 05:53:19PM +0100, Paolo Bonzini wrote: > All NICs have a cleanup function that, in most cases, zeroes the pointer > to the NICState. In some cases, it frees data belonging to the NIC. > > However, this function is never called except when exiting from QEMU. > It is not necessary to NULL pointers and free data here; the right place > to do that would be in the device's unrealize function, after calling > qemu_del_nic. Zeroing the NIC multiple times is also wrong for multiqueue > devices. > > This cleanup function gets in the way of making the NetClientStates for > the NIC hold an object_ref reference to the object, so get rid of it.
This patch does not drop NetClientInfo->cleanup() and clean up net.c. Do you have plans for a follow-up patch? > diff --git a/hw/net/dp8393x.c b/hw/net/dp8393x.c > index 7eab7ad..7ce13d2 100644 > --- a/hw/net/dp8393x.c > +++ b/hw/net/dp8393x.c > @@ -859,22 +859,11 @@ static void nic_reset(void *opaque) > dp8393x_update_irq(s); > } > > -static void nic_cleanup(NetClientState *nc) > -{ > - dp8393xState *s = qemu_get_nic_opaque(nc); > - > - timer_del(s->watchdog); > - timer_free(s->watchdog); > - > - g_free(s); > -} How about moving code that frees resources to unrealize? There are a couple of instances in this patch where we drop g_free() and it's a shame to lose the resource management life cycle completely.
pgpTjvtzL4_38.pgp
Description: PGP signature