[Spice-devel] [spice-gtk 2/3] usbredir: Use atomic for UsbDeviceManager::event_thread_run
Hans de Goede
hdegoede at redhat.com
Wed Jun 29 17:20:16 UTC 2016
Hi,
On 29-06-16 17:42, Christophe Fergeau wrote:
> This variable is accessed from 2 different threads (main thread and USB
> event thread), so some care must be taken to read/write it.
The event-thread only reads it, so I believe there is no need for this.
Regards,
Hans
> ---
> src/usb-device-manager.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/src/usb-device-manager.c b/src/usb-device-manager.c
> index 1fc8fc1..1912b62 100644
> --- a/src/usb-device-manager.c
> +++ b/src/usb-device-manager.c
> @@ -1280,7 +1280,7 @@ static gpointer spice_usb_device_manager_usb_ev_thread(gpointer user_data)
> SpiceUsbDeviceManagerPrivate *priv = self->priv;
> int rc;
>
> - while (priv->event_thread_run) {
> + while (g_atomic_int_get(&priv->event_thread_run)) {
> rc = libusb_handle_events(priv->context);
> if (rc && rc != LIBUSB_ERROR_INTERRUPTED) {
> const char *desc = spice_usbutil_libusb_strerror(rc);
> @@ -1310,7 +1310,7 @@ gboolean spice_usb_device_manager_start_event_listening(
> g_thread_join(priv->event_thread);
> priv->event_thread = NULL;
> }
> - priv->event_thread_run = TRUE;
> + g_atomic_int_set(&priv->event_thread_run, TRUE);
> priv->event_thread = g_thread_new("usb_ev_thread",
> spice_usb_device_manager_usb_ev_thread,
> self);
> @@ -1326,7 +1326,7 @@ void spice_usb_device_manager_stop_event_listening(
>
> priv->event_listeners--;
> if (priv->event_listeners == 0)
> - priv->event_thread_run = FALSE;
> + g_atomic_int_set(&priv->event_thread_run, FALSE);
> }
>
> static void spice_usb_device_manager_check_redir_on_connect(
>
More information about the Spice-devel
mailing list