This structure is potentially used in multiple thread. Currently in Gstreamer thread using streaming data and coroutine thread. 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