From 9fc06f5dd3fab51503f1ccbb2648ac9f09f0cbac Mon Sep 17 00:00:00 2001 From: Daniel Wagner Date: Mon, 31 Oct 2011 13:19:12 +0100 Subject: [PATCH] gdhcp: Use gcc atomics instead glib's ones g_atomic_int_exchange_and_add() has been removed from glib 2.30 and g_atomic_int_add() should be used. Though there are still quite a few distros out which do not ship a glib version with g_atomic_int_add(). Instead of maintaing a compatiblilty glib layer we just use the built-in functions for atomic memory access. --- gdhcp/client.c | 6 +++--- gdhcp/server.c | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/gdhcp/client.c b/gdhcp/client.c index 24614c7..3270346 100644 --- a/gdhcp/client.c +++ b/gdhcp/client.c @@ -72,7 +72,7 @@ typedef enum _dhcp_client_state { } ClientState; struct _GDHCPClient { - gint ref_count; + int ref_count; GDHCPType type; ClientState state; int ifindex; @@ -1506,7 +1506,7 @@ GDHCPClient *g_dhcp_client_ref(GDHCPClient *dhcp_client) if (dhcp_client == NULL) return NULL; - g_atomic_int_inc(&dhcp_client->ref_count); + __sync_fetch_and_add(&dhcp_client->ref_count, 1); return dhcp_client; } @@ -1516,7 +1516,7 @@ void g_dhcp_client_unref(GDHCPClient *dhcp_client) if (dhcp_client == NULL) return; - if (g_atomic_int_dec_and_test(&dhcp_client->ref_count) == FALSE) + if (__sync_fetch_and_sub(&dhcp_client->ref_count, 1) != 1) return; g_dhcp_client_stop(dhcp_client); diff --git a/gdhcp/server.c b/gdhcp/server.c index 54c068b..4f0b5b7 100644 --- a/gdhcp/server.c +++ b/gdhcp/server.c @@ -49,7 +49,7 @@ #define OFFER_TIME (5*60) struct _GDHCPServer { - gint ref_count; + int ref_count; GDHCPType type; gboolean started; int ifindex; @@ -821,7 +821,7 @@ GDHCPServer *g_dhcp_server_ref(GDHCPServer *dhcp_server) if (dhcp_server == NULL) return NULL; - g_atomic_int_inc(&dhcp_server->ref_count); + __sync_fetch_and_add(&dhcp_server->ref_count, 1); return dhcp_server; } @@ -846,7 +846,7 @@ void g_dhcp_server_unref(GDHCPServer *dhcp_server) if (dhcp_server == NULL) return; - if (g_atomic_int_dec_and_test(&dhcp_server->ref_count) == FALSE) + if (__sync_fetch_and_sub(&dhcp_server->ref_count, 1) != 1) return; g_dhcp_server_stop(dhcp_server); -- 2.7.4