summaryrefslogtreecommitdiff
path: root/gobex
diff options
context:
space:
mode:
authorLucas De Marchi <lucas.demarchi@profusion.mobi>2013-04-08 17:56:20 -0300
committerJohan Hedberg <johan.hedberg@intel.com>2013-04-09 07:01:58 +0900
commitd073af52ea5de4bef29ba96f1938ab6d462f3326 (patch)
tree69ac340e3d4667c360c4df1f22bb5d719a52057e /gobex
parent1bd26421ceb7d571609692f52367027d181604e8 (diff)
downloadbluez-d073af52ea5de4bef29ba96f1938ab6d462f3326.tar.gz
gobex: Use gcc builtin instead of g_atomic
g_atomic_* end up using G_STATIC_ASSERT, causing gcc 4.8 to yell due to -Wunused-local-typedefs. /usr/include/glib-2.0/glib/gmacros.h:162:53: error: typedef ‘_GStaticAssertCompileTimeAssertion_2’ locally defined but not used [-Werror=unused-local-typedefs] #define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] Most of the uses of atomic operations were wrong. They were fixed as well. If we are using atomic operations, reading the variable again later for logging is not an option, we should use the return of the atomic function used to fetch the variable.
Diffstat (limited to 'gobex')
-rw-r--r--gobex/gobex.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/gobex/gobex.c b/gobex/gobex.c
index a9bcee91b..ce4f284cf 100644
--- a/gobex/gobex.c
+++ b/gobex/gobex.c
@@ -1315,25 +1315,27 @@ GObex *g_obex_new(GIOChannel *io, GObexTransportType transport_type,
GObex *g_obex_ref(GObex *obex)
{
+ int refs;
+
if (obex == NULL)
return NULL;
- g_atomic_int_inc(&obex->ref_count);
+ refs = __sync_add_and_fetch(&obex->ref_count, 1);
- g_obex_debug(G_OBEX_DEBUG_COMMAND, "ref %u", obex->ref_count);
+ g_obex_debug(G_OBEX_DEBUG_COMMAND, "ref %u", refs);
return obex;
}
void g_obex_unref(GObex *obex)
{
- gboolean last_ref;
+ int refs;
- last_ref = g_atomic_int_dec_and_test(&obex->ref_count);
+ refs = __sync_sub_and_fetch(&obex->ref_count, 1);
- g_obex_debug(G_OBEX_DEBUG_COMMAND, "ref %u", obex->ref_count);
+ g_obex_debug(G_OBEX_DEBUG_COMMAND, "ref %u", refs);
- if (!last_ref)
+ if (refs > 0)
return;
g_slist_free_full(obex->req_handlers, g_free);