[spice-gtk,05/44] fixup! usb-redir: define interfaces to support emulated devices

Submitted by Frediano Ziglio on July 30, 2019, 12:02 p.m.

Details

Message ID 20190730120331.17967-6-fziglio@redhat.com
State Superseded
Headers show
Series "Follow ups for CD emulation patch series" ( rev: 1 ) in Spice

Not browsing as part of any series.

Commit Message

Frediano Ziglio July 30, 2019, 12:02 p.m.
Initialise SpiceUsbBackendDevice fields earlier

Allows to use spice_usb_backend_device_unref and read some
information directly from the device.
---
 src/usb-backend.c | 15 +++++++--------
 1 file changed, 7 insertions(+), 8 deletions(-)

Patch hide | download patch | download mbox

diff --git a/src/usb-backend.c b/src/usb-backend.c
index 0b37274e..a447bbfe 100644
--- a/src/usb-backend.c
+++ b/src/usb-backend.c
@@ -920,19 +920,23 @@  gboolean spice_usb_backend_create_device(SpiceUsbBackend *be,
     }
 
     dev = g_new0(SpiceUsbBackendDevice, 1);
+    dev->device_info.bus = BUS_NUMBER_FOR_EMULATED_USB;
+    dev->device_info.address = address;
+    dev->device_info.device_type = dev_type;
+    dev->ref_count = 1;
 
     param->address = address;
     if (be->dev_init[dev_type](be, dev, param, &edev)) {
-        g_free(dev);
+        spice_usb_backend_device_unref(dev);
         return FALSE;
     }
+    dev->edev = edev;
 
     if (!device_ops(edev)->get_descriptor(edev, LIBUSB_DT_DEVICE, 0,
                                           (void **)&desc, &device_desc_size)
         || device_desc_size != sizeof(*desc)) {
 
-        device_ops(edev)->delete(edev);
-        g_free(dev);
+        spice_usb_backend_device_unref(dev);
         param->error = g_error_new(SPICE_CLIENT_ERROR, SPICE_CLIENT_ERROR_FAILED,
                                    _("can't create device - internal error"));
         return FALSE;
@@ -940,17 +944,12 @@  gboolean spice_usb_backend_create_device(SpiceUsbBackend *be,
 
     be->own_devices_mask |= 1 << address;
 
-    dev->device_info.bus = BUS_NUMBER_FOR_EMULATED_USB;
-    dev->device_info.address = address;
     dev->device_info.vid = desc->idVendor;
     dev->device_info.pid = desc->idProduct;
     dev->device_info.bcdUSB = desc->bcdUSB;
     dev->device_info.class = desc->bDeviceClass;
     dev->device_info.subclass = desc->bDeviceSubClass;
     dev->device_info.protocol = desc->bDeviceProtocol;
-    dev->device_info.device_type = dev_type;
-    dev->ref_count = 1;
-    dev->edev = edev;
 
     if (be->hotplug_callback) {
         be->hotplug_callback(be->hotplug_user_data, dev, TRUE);