diff options
author | Rainer Gerhards <rgerhards@adiscon.com> | 2008-09-18 12:45:44 +0200 |
---|---|---|
committer | Rainer Gerhards <rgerhards@adiscon.com> | 2008-09-18 12:45:44 +0200 |
commit | 9d8bb5629b6131be7c260ab3f9169ea1055c07f6 (patch) | |
tree | fa017f714eb4c75f94b9902f66c59f24d4bb4bf6 /runtime/atomic.h | |
parent | 7b63cd6feda5087c43652bdcf8e694b544295d5b (diff) | |
parent | 4c96ebdcfe075e80810b01257cf21ea1c9b3ec0e (diff) | |
download | rsyslog-9d8bb5629b6131be7c260ab3f9169ea1055c07f6.tar.gz rsyslog-9d8bb5629b6131be7c260ab3f9169ea1055c07f6.tar.bz2 rsyslog-9d8bb5629b6131be7c260ab3f9169ea1055c07f6.zip |
Merge branch 'helgrind' into perf
Conflicts:
ChangeLog
Diffstat (limited to 'runtime/atomic.h')
-rw-r--r-- | runtime/atomic.h | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/runtime/atomic.h b/runtime/atomic.h index 430ae7f0..d15f78ee 100644 --- a/runtime/atomic.h +++ b/runtime/atomic.h @@ -1,6 +1,6 @@ /* This header supplies atomic operations. So far, we rely on GCC's - * atomic builtins. I have no idea if we can check them via autotools, - * but I am making the necessary provisioning to live without them if + * atomic builtins. During configure, we check if atomic operatons are + * available. If they are not, I am making the necessary provisioning to live without them if * they are not available. Please note that you should only use the macros * here if you think you can actually live WITHOUT an explicit atomic operation, * because in the non-presence of them, we simply do it without atomicitiy. @@ -36,16 +36,20 @@ #ifndef INCLUDED_ATOMIC_H #define INCLUDED_ATOMIC_H -/* set the following to 1 if we have atomic operations (and #undef it otherwise) */ -/* #define DO_HAVE_ATOMICS 1 */ /* for this release, we disable atomic calls because there seem to be some * portability problems and we can not fix that without destabilizing the build. * They simply came in too late. -- rgerhards, 2008-04-02 */ -/* make sure they are not used! -#define ATOMIC_INC(data) ((void) __sync_fetch_and_add(&data, 1)) -#define ATOMIC_DEC_AND_FETCH(data) __sync_sub_and_fetch(&data, 1) -*/ -#define ATOMIC_INC(data) (++(data)) +#ifdef HAVE_ATOMIC_BUILTINS +# define ATOMIC_INC(data) ((void) __sync_fetch_and_add(&(data), 1)) +# define ATOMIC_DEC_AND_FETCH(data) __sync_sub_and_fetch(&(data), 1) +# define ATOMIC_FETCH_32BIT(data) ((unsigned) __sync_fetch_and_and(&(data), 0xffffffff)) +# define ATOMIC_STORE_1_TO_32BIT(data) __sync_lock_test_and_set(&(data), 1) +#else +# warning "atomic builtins not available, using nul operations" +# define ATOMIC_INC(data) (++(data)) +# define ATOMIC_FETCH_32BIT(data) (data) +# define ATOMIC_STORE_1_TO_32BIT(data) (data) = 1 +#endif #endif /* #ifndef INCLUDED_ATOMIC_H */ |