|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
From: Christophe Fergeau <cfergeau@redhat.com>
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
Date: Wed, 29 Jun 2016 16:48:18 +0200
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
Subject: [PATCH] usbredir: Use atomic for UsbDeviceManager::event_thread_run
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
This variable is accessed from 2 different threads (main thread and USB
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
event thread), so some care must be taken to read/write it.
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
---
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
src/usb-device-manager.c | 10 +++++-----
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
1 file changed, 5 insertions(+), 5 deletions(-)
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
diff --git a/src/usb-device-manager.c b/src/usb-device-manager.c
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
index 1fc8fc1..808ec6c 100644
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
--- a/src/usb-device-manager.c
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
+++ b/src/usb-device-manager.c
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
@@ -112,7 +112,7 @@ struct _SpiceUsbDeviceManagerPrivate {
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
libusb_context *context;
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
int event_listeners;
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
GThread *event_thread;
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
- gboolean event_thread_run;
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
+ gint event_thread_run;
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
struct usbredirfilter_rule *auto_conn_filter_rules;
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
struct usbredirfilter_rule *redirect_on_connect_rules;
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
int auto_conn_filter_rules_count;
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
@@ -380,7 +380,7 @@ static void spice_usb_device_manager_dispose(GObject *gobject)
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
priv->hp_handle = 0;
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
}
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
#endif
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
- if (priv->event_thread && !priv->event_thread_run) {
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
+ if (priv->event_thread && !g_atomic_int_get(&priv->event_thread_run)) {
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
g_thread_join(priv->event_thread);
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
priv->event_thread = NULL;
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
}
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
@@ -1280,7 +1280,7 @@ static gpointer spice_usb_device_manager_usb_ev_thread(gpointer user_data)
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
SpiceUsbDeviceManagerPrivate *priv = self->priv;
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
int rc;
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
- while (priv->event_thread_run) {
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
+ while (g_atomic_int_get(&priv->event_thread_run)) {
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
rc = libusb_handle_events(priv->context);
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
if (rc && rc != LIBUSB_ERROR_INTERRUPTED) {
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
const char *desc = spice_usbutil_libusb_strerror(rc);
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
@@ -1310,7 +1310,7 @@ gboolean spice_usb_device_manager_start_event_listening(
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
g_thread_join(priv->event_thread);
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
priv->event_thread = NULL;
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
}
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
- priv->event_thread_run = TRUE;
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
+ g_atomic_int_set(&priv->event_thread_run, TRUE);
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
priv->event_thread = g_thread_new("usb_ev_thread",
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
spice_usb_device_manager_usb_ev_thread,
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
self);
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
@@ -1326,7 +1326,7 @@ void spice_usb_device_manager_stop_event_listening(
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
priv->event_listeners--;
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
if (priv->event_listeners == 0)
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
- priv->event_thread_run = FALSE;
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
+ g_atomic_int_set(&priv->event_thread_run, FALSE);
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
}
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
|
|
![](https://seccdn.libravatar.org/avatar/7a2fa090563e2276c90a5d4129dcc5e65e0a523995ecbceda0e7d53466cc5a03?s=16&d=retro) |
a089ec2 |
static void spice_usb_device_manager_check_redir_on_connect(
|