diff options
author | aliguori <aliguori@c046a42c-6fe2-441c-8c8c-71466251a162> | 2009-04-17 17:11:08 +0000 |
---|---|---|
committer | aliguori <aliguori@c046a42c-6fe2-441c-8c8c-71466251a162> | 2009-04-17 17:11:08 +0000 |
commit | b946a1533209f61a93e34898aebb5b43154b99c3 (patch) | |
tree | 36b0017910ca42cc5a41671b8edc7faa5da0a452 /hw/etraxfs_eth.c | |
parent | 32a8f6ae93f175518f86f99249177c35d1a85114 (diff) |
Introduce VLANClientState::cleanup() (Mark McLoughlin)
We're currently leaking memory and file descriptors on device
hot-unplug.
Signed-off-by: Mark McLoughlin <markmc@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@7150 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'hw/etraxfs_eth.c')
-rw-r--r-- | hw/etraxfs_eth.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/hw/etraxfs_eth.c b/hw/etraxfs_eth.c index c87e55f61d..15270f573d 100644 --- a/hw/etraxfs_eth.c +++ b/hw/etraxfs_eth.c @@ -554,6 +554,16 @@ static CPUWriteMemoryFunc *eth_write[] = { ð_writel, }; +static void eth_cleanup(VLANClientState *vc) +{ + struct fs_eth *eth = vc->opaque; + + cpu_unregister_io_memory(eth->ethregs); + + qemu_free(eth->dma_out); + qemu_free(eth); +} + void *etraxfs_eth_init(NICInfo *nd, CPUState *env, qemu_irq *irq, target_phys_addr_t base, int phyaddr) { @@ -585,7 +595,8 @@ void *etraxfs_eth_init(NICInfo *nd, CPUState *env, cpu_register_physical_memory (base, 0x5c, eth->ethregs); eth->vc = qemu_new_vlan_client(nd->vlan, nd->model, nd->name, - eth_receive, eth_can_receive, eth); + eth_receive, eth_can_receive, + eth_cleanup, eth); eth->vc->opaque = eth; eth->vc->link_status_changed = eth_set_link; |