[Spice-devel] [PATCH 8/9] auto-connect shared CD devices added using command line

Frediano Ziglio fziglio at redhat.com
Fri Dec 6 10:30:52 UTC 2019


> 
> From: Alexander Nezhinsky <anezhins at redhat.com>
> 
> Turn shared CD devices added using command line into hot-plugged devices
> which are redirected according to 'auto-connect' filter rules.
> By default command line devices are added using 'redirect-on-connect' filter,
> which do not fit the shard CD connecting requirements.
> 

Can you describe the requirements here?

This patch looks like an workaround to me.

> Signed-off-by: Alexander Nezhinsky <anezhins at redhat.com>
> ---
>  src/usb-device-manager.c | 25 ++++++++++++++++++-------
>  1 file changed, 18 insertions(+), 7 deletions(-)
> 
> diff --git a/src/usb-device-manager.c b/src/usb-device-manager.c
> index 0961ef9..a69a346 100644
> --- a/src/usb-device-manager.c
> +++ b/src/usb-device-manager.c
> @@ -889,11 +889,9 @@ static void
> spice_usb_device_manager_check_redir_on_connect(
>      GTask *task;
>      SpiceUsbDevice *device;
>      SpiceUsbBackendDevice *bdev;
> +    gboolean is_cd, shall_redirect;
>      guint i;
>  
> -    if (priv->redirect_on_connect == NULL)
> -        return;
> -
>      for (i = 0; i < priv->devices->len; i++) {
>          device = g_ptr_array_index(priv->devices, i);
>  
> @@ -901,10 +899,23 @@ static void
> spice_usb_device_manager_check_redir_on_connect(
>              continue;
>  
>          bdev = spice_usb_device_manager_device_to_bdev(self, device);
> -        if (spice_usb_backend_device_check_filter(
> -                            bdev,
> -                            priv->redirect_on_connect_rules,
> -                            priv->redirect_on_connect_rules_count) == 0) {
> +        is_cd = spice_usb_backend_device_get_libdev(bdev) == NULL;

This is checking if emulated, not if is a CD.

> +
> +        if (priv->redirect_on_connect) {
> +            shall_redirect = !spice_usb_backend_device_check_filter(
> +                                bdev,
> +                                priv->redirect_on_connect_rules,
> +                                priv->redirect_on_connect_rules_count);

Why not setting some "rules" and "rules_count" variable instead
and call spice_usb_backend_device_check_filter once?

> +        } else if (is_cd) {
> +            shall_redirect = !spice_usb_backend_device_check_filter(
> +                                bdev,
> +                                priv->auto_conn_filter_rules,
> ++                               priv->auto_conn_filter_rules_count);
> +        } else {
> +            shall_redirect = FALSE;
> +        }
> +
> +        if (shall_redirect) {
>              /* Note: re-uses spice_usb_device_manager_connect_device_async's
>                 completion handling code! */
>              task = g_task_new(self,

Frediano



More information about the Spice-devel mailing list