--- a/qemu/hw/usb-hub.c 2006-04-28 19:44:18.000000000 -0500 +++ b/qemu/hw/usb-hub.c 2006-04-29 18:55:46.000000000 -0500 @@ -240,6 +240,13 @@ return 1; } +int usb_hub_handle_close(USBDevice *dev) +{ + USBHubState *s = (USBHubState *)(dev->opaque); + qemu_free(s); + return 1; +} + int usb_hub_handle_control(USBDevice *dev, int request, int value, int index, int length, uint8_t *data) { @@ -385,8 +392,7 @@ break; case PORT_RESET: if (dev) { - dev->handle_packet(dev, - USB_MSG_RESET, 0, 0, NULL, 0); + dev->handle_msg(dev, USB_MSG_RESET); port->wPortChange |= PORT_STAT_C_RESET; /* set enable bit */ // port->wPortChange |= PORT_STAT_C_ENABLE; @@ -578,6 +584,7 @@ dev->handle_packet= usb_hub_handle_packet; dev->handle_attach= usb_hub_attach; dev->handle_reset= usb_hub_handle_reset; + dev->handle_close= usb_hub_handle_close; dev->handle_control= usb_hub_handle_control; dev->handle_data= usb_hub_handle_data; --- a/qemu/hw/usb-hid.c 2006-04-28 19:44:18.000000000 -0500 +++ b/qemu/hw/usb-hid.c 2006-04-29 18:56:15.000000000 -0500 @@ -526,6 +526,7 @@ dev->handle_packet= usb_generic_handle_packet; dev->handle_reset= usb_mouse_handle_reset; + dev->handle_close= usb_mouse_handle_close; dev->handle_control= usb_mouse_handle_control; dev->handle_data= usb_mouse_handle_data; s->kind= USB_TABLET;