diff options
author | Olivier CrĂȘte <olivier.crete@collabora.co.uk> | 2008-12-28 17:14:02 -0500 |
---|---|---|
committer | Olivier CrĂȘte <olivier.crete@collabora.co.uk> | 2008-12-28 17:14:02 -0500 |
commit | f4636ab314e11e96bbef1bb6271e9bf460fd5efd (patch) | |
tree | 8a89e08cf1d6bb8dd34bd55badffabd07656f50a /transmitters/multicast | |
parent | 8ecfcb74a8a40285e136cbeb099b6ccd9c597962 (diff) | |
download | farstream-f4636ab314e11e96bbef1bb6271e9bf460fd5efd.tar.gz |
Use an atomic for the send count in mcast
Diffstat (limited to 'transmitters/multicast')
-rw-r--r-- | transmitters/multicast/fs-multicast-transmitter.c | 10 |
1 files changed, 3 insertions, 7 deletions
diff --git a/transmitters/multicast/fs-multicast-transmitter.c b/transmitters/multicast/fs-multicast-transmitter.c index 62bc3058..538a788c 100644 --- a/transmitters/multicast/fs-multicast-transmitter.c +++ b/transmitters/multicast/fs-multicast-transmitter.c @@ -504,7 +504,7 @@ struct _UdpSock { guint component_id; - gint sendcount; + volatile gint sendcount; }; static gboolean @@ -986,19 +986,15 @@ fs_multicast_transmitter_put_udpsock (FsMulticastTransmitter *trans, void fs_multicast_transmitter_udpsock_inc_sending (UdpSock *udpsock) { - if (udpsock->sendcount == 0) + if (g_atomic_int_exchange_and_add (&udpsock->sendcount, 1) == 0) g_signal_emit_by_name (udpsock->udpsink, "add", udpsock->multicast_ip, udpsock->port); - - udpsock->sendcount++; } void fs_multicast_transmitter_udpsock_dec_sending (UdpSock *udpsock) { - udpsock->sendcount--; - - if (udpsock->sendcount == 0) + if (g_atomic_int_dec_and_test (&udpsock->sendcount)) g_signal_emit_by_name (udpsock->udpsink, "remove", udpsock->multicast_ip, udpsock->port); } |