On Sun, 2016-02-28 at 11:54 +0200, Dmitry Fleytman wrote: > From: Kirill Moizik <kmoizik@xxxxxxxxxx> > > This commit introduces channel mutex to allow usage of > channel objects in mutithreaded environments. > > This mutex will be used by future commits to protect > thread unsafe usbredir functions and data structures. > > Signed-off-by: Kirill Moizik <kmoizik@xxxxxxxxxx> > Signed-off-by: Dmitry Fleytman <dfleytma@xxxxxxxxxx> > --- > src/channel-usbredir-priv.h | 4 ++++ > src/channel-usbredir.c | 19 +++++++++++++++++++ > 2 files changed, 23 insertions(+) > > diff --git a/src/channel-usbredir-priv.h b/src/channel-usbredir-priv.h > index 2c4c6f7..c987474 100644 > --- a/src/channel-usbredir-priv.h > +++ b/src/channel-usbredir-priv.h > @@ -51,6 +51,10 @@ void > spice_usbredir_channel_disconnect_device(SpiceUsbredirChannel *channel); > > libusb_device *spice_usbredir_channel_get_device(SpiceUsbredirChannel > *channel); > > +void spice_usbredir_channel_lock(SpiceUsbredirChannel *channel); > + > +void spice_usbredir_channel_unlock(SpiceUsbredirChannel *channel); > + > void spice_usbredir_channel_get_guest_filter( > SpiceUsbredirChannel *channel, > const struct usbredirfilter_rule **rules_ret, > diff --git a/src/channel-usbredir.c b/src/channel-usbredir.c > index c236ee7..c91b3f7 100644 > --- a/src/channel-usbredir.c > +++ b/src/channel-usbredir.c > @@ -79,6 +79,7 @@ struct _SpiceUsbredirChannelPrivate { > GSimpleAsyncResult *result; > SpiceUsbAclHelper *acl_helper; > #endif > + GMutex *device_connect_mutex; As Frediano suggested in reply to an earlier version of this patch, I think allocating the full structure here would be simpler. > }; > > static void channel_set_handlers(SpiceChannelClass *klass); > @@ -107,6 +108,8 @@ static void > spice_usbredir_channel_init(SpiceUsbredirChannel *channel) > { > #ifdef USE_USBREDIR > channel->priv = SPICE_USBREDIR_CHANNEL_GET_PRIVATE(channel); > + channel->priv->device_connect_mutex = g_new0(GMutex, 1); > + g_mutex_init(channel->priv->device_connect_mutex); g_mutex_init() requires glib >= 2.32. configure.ac should be updated since it only requires 2.28 right now. > #endif > } > > @@ -182,6 +185,10 @@ static void spice_usbredir_channel_finalize(GObject *obj) > > if (channel->priv->host) > usbredirhost_close(channel->priv->host); > +#ifdef USE_USBREDIR > + g_mutex_clear(channel->priv->device_connect_mutex); > + g_free(channel->priv->device_connect_mutex); > +#endif > > /* Chain up to the parent class */ > if (G_OBJECT_CLASS(spice_usbredir_channel_parent_class)->finalize) > @@ -561,6 +568,18 @@ static void *usbredir_alloc_lock(void) { > #endif > } > > +void spice_usbredir_channel_lock(SpiceUsbredirChannel *channel) > +{ > + g_return_if_fail(SPICE_IS_USBREDIR_CHANNEL(channel)); > + g_mutex_lock(channel->priv->device_connect_mutex); > +} > + > +void spice_usbredir_channel_unlock(SpiceUsbredirChannel *channel) > +{ > + g_return_if_fail(SPICE_IS_USBREDIR_CHANNEL(channel)); > + g_mutex_unlock(channel->priv->device_connect_mutex); > +} > + > static void usbredir_lock_lock(void *user_data) { > GMutex *mutex = user_data; > _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel