mirror of
https://github.com/qemu/qemu.git
synced 2024-11-23 19:03:38 +08:00
usb-host: fix host close
The whole usb_host_close() function is skipped in case the device is not in attached state. This is wrong though, only then usb_device_detach() must be skipped, all other cleanup (especially device reset and closing the file handle) still needs to be done. There are code paths where usb_host_close() is called with the device in detached state already. This fixes usb-host devices not being released and returned to the host after removing them with device_del. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
parent
db80358a20
commit
39fba3ada9
@ -1349,7 +1349,7 @@ static int usb_host_close(USBHostDevice *dev)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (dev->fd == -1 || !dev->dev.attached) {
|
||||
if (dev->fd == -1) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -1367,7 +1367,9 @@ static int usb_host_close(USBHostDevice *dev)
|
||||
}
|
||||
async_complete(dev);
|
||||
dev->closing = 0;
|
||||
usb_device_detach(&dev->dev);
|
||||
if (dev->dev.attached) {
|
||||
usb_device_detach(&dev->dev);
|
||||
}
|
||||
ioctl(dev->fd, USBDEVFS_RESET);
|
||||
close(dev->fd);
|
||||
dev->fd = -1;
|
||||
|
Loading…
Reference in New Issue
Block a user