a724dff remote-viewer: add handler for SIGINT signal

1 file Authored by fgiudici 2 years ago, Committed by berrange 2 years ago,
    remote-viewer: add handler for SIGINT signal
    
    When remote-viewer is started from terminal, CTRL-C sends a SIGINT
    signal to the program causing immediate termination. On linux clients
    usb redirected devices are left without any kernel driver attached,
    causing them to appear as no more available to the host.
    Add a SIGINT handler to allow a clean exit, in particular to allow
    the kernel to attach back the host driver.
    The issue is present on linux only.
    
    To perform usb device redirection, virt-viewer leverages spice-gtk
    library, which in turn relies on usbredir library, which uses libusb.
    In order to take control of the usb device the auto-loaded kernel
    driver must be detached. This is achieved (in the very end) with
    libusb_detach_kernel_driver(). Then the device interfaces can be claimed
    with libusb_claim_interface() and get in control to the application.
    During normal application termination, the usb channel is teared down,
    performing a reset of the usb device and giving back the control of the
    device to the kernel (libusb_attach_kernel_driver()).
    If the application quits without doing this, the device interfaces will
    end up with no driver attached, making them not usable in the host
    system.
    
    Note that enabling libusb_set_auto_detach_kernel_driver() does not solve
    the issue, as this is just a convenient API from libusb: libusb will
    take care of detaching/attaching the driver to the interfaces of the usb
    device each time a call to libusb_release_interface() and
    libusb_claim_interface() is performed. An unexpected quit of the
    application will skip the libusb_release_interface() call too, leaving
    the interfaces without any driver attached.
    
    Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1713311
    
    Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
    Signed-off-by: Francesco Giudici <fgiudici@redhat.com>
    
        
file modified
+25 -0