diff options
author | Lennart Poettering <lennart@poettering.net> | 2009-07-20 17:34:17 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2009-07-20 17:34:17 +0200 |
commit | 18e975fc5ef68a89875c77974570884b9214a009 (patch) | |
tree | e0346c369315e71f386190c19ad4a1c06d5b526e /src/pulsecore/refcnt.h | |
parent | 3a09a88fd1f3dfe365dc1f3e455c097010d00964 (diff) |
mergedrtpoll
Diffstat (limited to 'src/pulsecore/refcnt.h')
-rw-r--r-- | src/pulsecore/refcnt.h | 44 |
1 files changed, 40 insertions, 4 deletions
diff --git a/src/pulsecore/refcnt.h b/src/pulsecore/refcnt.h index 1e988326..782436b5 100644 --- a/src/pulsecore/refcnt.h +++ b/src/pulsecore/refcnt.h @@ -23,23 +23,59 @@ ***/ #include <pulsecore/atomic.h> +#include <pulsecore/macro.h> +#include <pulsecore/log.h> + +/* #define DEBUG_REF */ #define PA_REFCNT_DECLARE \ pa_atomic_t _ref -#define PA_REFCNT_INIT(p) \ - pa_atomic_store(&(p)->_ref, 1) +#define PA_REFCNT_VALUE(p) \ + pa_atomic_load(&(p)->_ref) #define PA_REFCNT_INIT_ZERO(p) \ pa_atomic_store(&(p)->_ref, 0) +#ifndef DEBUG_REF + +#define PA_REFCNT_INIT(p) \ + pa_atomic_store(&(p)->_ref, 1) + #define PA_REFCNT_INC(p) \ pa_atomic_inc(&(p)->_ref) #define PA_REFCNT_DEC(p) \ (pa_atomic_dec(&(p)->_ref)-1) -#define PA_REFCNT_VALUE(p) \ - pa_atomic_load(&(p)->_ref) +#else + +/* If you need to debug ref counting problems define DEBUG_REF and + * set $PULSE_LOG_BACKTRACE=5 or suchlike in the shell when running + * PA */ + +#define PA_REFCNT_INIT(p) \ + do { \ + pa_atomic_store(&(p)->_ref, 1); \ + pa_log("REF: Init %p", p); \ + } while (FALSE) + +#define PA_REFCNT_INC(p) \ + do { \ + pa_atomic_inc(&(p)->_ref); \ + pa_log("REF: Inc %p", p); \ + } while (FALSE) \ + +#define PA_REFCNT_DEC(p) \ + ({ \ + int _j = (pa_atomic_dec(&(p)->_ref)-1); \ + if (_j <= 0) \ + pa_log("REF: Done %p", p); \ + else \ + pa_log("REF: Dec %p", p); \ + _j; \ + }) + +#endif #endif |