++count; \
MUTEX_UNLOCK(&svref_mutex); \
} STMT_END
-# define ATOMIC_DEC_AND_TEST(res,count) \
- MUTEX_LOCK(&svref_mutex); \
- res = (--count == 0); \
- MUTEX_UNLOCK(&svref_mutex); \
+# define ATOMIC_DEC_AND_TEST(res,count) STMT_START { \
+ MUTEX_LOCK(&svref_mutex); \
+ res = (--count == 0); \
+ MUTEX_UNLOCK(&svref_mutex); \
} STMT_END
# else
# define ATOMIC_INC(count) atomic_inc(&count)
# endif /* EMULATE_ATOMIC_REFCOUNTS */
#else
# define ATOMIC_INC(count) (++count)
-# define ATOMIC_DEC_AND_TEST(res, count) (res = --count)
+# define ATOMIC_DEC_AND_TEST(res, count) (res = (--count == 0))
#endif /* USE_THREADS */
#ifdef __GNUC__
double xnv_nv; /* numeric value, if any */
};
+/* These structure must match the beginning of struct xpvhv in hv.h. */
struct xpvmg {
char * xpv_pv; /* pointer to malloced string */
STRLEN xpv_cur; /* length of xpv_pv as a C string */