Parcourir la source

Keep usb host scanning from leaking file descriptors

If the first case does not succeed, then the usb scanning code will leak file
descriptors on every scan.



git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5509 c046a42c-6fe2-441c-8c8c-71466251a162
aliguori il y a 17 ans
Parent
commit
f16a0db323
1 fichiers modifiés avec 11 ajouts et 5 suppressions
  1. 11 5
      usb-linux.c

+ 11 - 5
usb-linux.c

@@ -1276,27 +1276,31 @@ static int usb_host_scan(void *opaque, USBScanFunc *func)
             usb_fs_type = USB_FS_PROC;
             fclose(f);
             dprintf(opened, USBPROCBUS_PATH, devices);
+            goto found_devices;
         }
         /* try additional methods if an access method hasn't been found yet */
         f = fopen(USBDEVBUS_PATH "/devices", "r");
-        if (!usb_fs_type && f) {
+        if (f) {
             /* devices found in /dev/bus/usb/ */
             strcpy(devpath, USBDEVBUS_PATH);
             usb_fs_type = USB_FS_DEV;
             fclose(f);
             dprintf(opened, USBDEVBUS_PATH, devices);
+            goto found_devices;
         }
         dir = opendir(USBSYSBUS_PATH "/devices");
-        if (!usb_fs_type && dir) {
+        if (dir) {
             /* devices found in /dev/bus/usb/ (yes - not a mistake!) */
             strcpy(devpath, USBDEVBUS_PATH);
             usb_fs_type = USB_FS_SYS;
             closedir(dir);
             dprintf(opened, USBSYSBUS_PATH, devices);
+            goto found_devices;
         }
+    found_devices:
         if (!usb_fs_type) {
             term_printf("husb: unable to access USB devices\n");
-            goto the_end;
+            return -ENOENT;
         }
 
         /* the module setting (used later for opening devices) */
@@ -1307,7 +1311,7 @@ static int usb_host_scan(void *opaque, USBScanFunc *func)
         } else {
             /* out of memory? */
             perror("husb: unable to allocate memory for device path");
-            goto the_end;
+            return -ENOMEM;
         }
     }
 
@@ -1319,8 +1323,10 @@ static int usb_host_scan(void *opaque, USBScanFunc *func)
     case USB_FS_SYS:
         ret = usb_host_scan_sys(opaque, func);
         break;
+    default:
+        ret = -EINVAL;
+        break;
     }
- the_end:
     return ret;
 }