summaryrefslogtreecommitdiffstats
path: root/libglusterfs/src/client_t.h
diff options
context:
space:
mode:
Diffstat (limited to 'libglusterfs/src/client_t.h')
-rw-r--r--libglusterfs/src/client_t.h17
1 files changed, 17 insertions, 0 deletions
diff --git a/libglusterfs/src/client_t.h b/libglusterfs/src/client_t.h
index 2accf0c6fc2..f6d161e930d 100644
--- a/libglusterfs/src/client_t.h
+++ b/libglusterfs/src/client_t.h
@@ -78,6 +78,23 @@ typedef struct clienttable clienttable_t;
struct rpcsvc_auth_data;
+/*
+ * a more comprehensive feature test is shown at
+ * http://lists.iptel.org/pipermail/semsdev/2010-October/005075.html
+ * this is sufficient for RHEL5 i386 builds
+ */
+#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1)) && !defined(__i386__)
+# define INCREMENT_ATOMIC(lk, op) __sync_add_and_fetch(&op, 1)
+# define DECREMENT_ATOMIC(lk, op) __sync_sub_and_fetch(&op, 1)
+#else
+/* These are only here for old gcc, e.g. on RHEL5 i386.
+ * We're not ever going to use this in an if stmt,
+ * but let's be pedantically correct for style points */
+# define INCREMENT_ATOMIC(lk, op) do { LOCK (&lk); ++op; UNLOCK (&lk); } while (0)
+/* this is a gcc 'statement expression', it works with llvm/clang too */
+# define DECREMENT_ATOMIC(lk, op) ({ LOCK (&lk); --op; UNLOCK (&lk); op; })
+#endif
+
client_t *
gf_client_get (xlator_t *this, struct rpcsvc_auth_data *cred, char *client_uid);