[PATCH spice-gtk] spice-channel: Use atomic operations for SpiceMsgIn::refcount

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]     [Monitors]