> On 1 Mar 2016, at 24:55 AM, Jonathon Jongsma <jjong...@redhat.com> wrote: > > On Sun, 2016-02-28 at 11:54 +0200, Dmitry Fleytman wrote: >> From: Kirill Moizik <kmoi...@redhat.com> >> >> 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 <kmoi...@redhat.com> >> Signed-off-by: Dmitry Fleytman <dfley...@redhat.com> >> --- >> 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.
Yes, this is an artefact from previous versions, changed. > >> }; >> >> 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. We did not intend to introduce code that unconditionally requires newer GLib, I used STATIC_MUTEX* defines in the next version to preserve compatibility with older GLib versions. > >> #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@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/spice-devel