summaryrefslogtreecommitdiff
path: root/transmitters/multicast
diff options
context:
space:
mode:
authorOlivier CrĂȘte <olivier.crete@collabora.co.uk>2008-12-28 17:14:02 -0500
committerOlivier CrĂȘte <olivier.crete@collabora.co.uk>2008-12-28 17:14:02 -0500
commitf4636ab314e11e96bbef1bb6271e9bf460fd5efd (patch)
tree8a89e08cf1d6bb8dd34bd55badffabd07656f50a /transmitters/multicast
parent8ecfcb74a8a40285e136cbeb099b6ccd9c597962 (diff)
downloadfarstream-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.c10
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);
}