On Tue, Apr 17, 2018 at 01:32:53PM +0100, Frediano Ziglio wrote: > This structure is potentially used in multiple thread. > Currently in Gstreamer thread using streaming data and coroutine > thread. But only GStreamer uses another thread, so this might be suboptimal for all other channels. > > Signed-off-by: Frediano Ziglio <fziglio@xxxxxxxxxx> > --- > I would avoid the atomic penalty but better safe then sorry > --- > src/spice-channel-priv.h | 2 +- > src/spice-channel.c | 5 ++--- > 2 files changed, 3 insertions(+), 4 deletions(-) > > diff --git a/src/spice-channel-priv.h b/src/spice-channel-priv.h > index b431037..706df9f 100644 > --- a/src/spice-channel-priv.h > +++ b/src/spice-channel-priv.h > @@ -55,7 +55,7 @@ struct _SpiceMsgOut { > }; > > struct _SpiceMsgIn { > - int refcount; > + gint refcount; > SpiceChannel *channel; > uint8_t header[MAX_SPICE_DATA_HEADER_SIZE]; > uint8_t *data; > diff --git a/src/spice-channel.c b/src/spice-channel.c > index 7e3e3b7..49897b7 100644 > --- a/src/spice-channel.c > +++ b/src/spice-channel.c > @@ -531,7 +531,7 @@ void spice_msg_in_ref(SpiceMsgIn *in) > { > g_return_if_fail(in != NULL); > > - in->refcount++; > + g_atomic_int_inc(&in->refcount); > } > > G_GNUC_INTERNAL > @@ -539,8 +539,7 @@ void spice_msg_in_unref(SpiceMsgIn *in) > { > g_return_if_fail(in != NULL); > > - in->refcount--; > - if (in->refcount > 0) > + if (!g_atomic_int_dec_and_test(&in->refcount)) > return; > if (in->parsed) > in->pfree(in->parsed); > -- > 2.14.3 > > _______________________________________________ > Spice-devel mailing list > Spice-devel@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/spice-devel
Attachment:
signature.asc
Description: PGP signature
_______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel