aboutsummaryrefslogtreecommitdiff
path: root/sys/netinet/sctp_os_bsd.h
diff options
context:
space:
mode:
authorRandall Stewart <rrs@FreeBSD.org>2009-02-12 18:50:27 +0000
committerRandall Stewart <rrs@FreeBSD.org>2009-02-12 18:50:27 +0000
commit1ae616bdd1308f9afe4e0cf74f25676d253ecb2e (patch)
tree0a67f84736b00a1a9c3cc52daa3f2d44ca072262 /sys/netinet/sctp_os_bsd.h
parente29c5f9fe0c5f42402a9a1fac8f2fa84bf5d3ddc (diff)
Notes
Diffstat (limited to 'sys/netinet/sctp_os_bsd.h')
-rw-r--r--sys/netinet/sctp_os_bsd.h21
1 files changed, 21 insertions, 0 deletions
diff --git a/sys/netinet/sctp_os_bsd.h b/sys/netinet/sctp_os_bsd.h
index 9514f7a218cf..1ffad1cf7451 100644
--- a/sys/netinet/sctp_os_bsd.h
+++ b/sys/netinet/sctp_os_bsd.h
@@ -502,3 +502,24 @@ sctp_get_mbuf_for_msg(unsigned int space_needed,
#define MD5_Final MD5Final
#endif
+
+#define SCTP_DECREMENT_AND_CHECK_REFCOUNT(addr) (atomic_fetchadd_int(addr, -1) == 1)
+#if defined(INVARIANTS)
+#define SCTP_SAVE_ATOMIC_DECREMENT(addr, val) \
+{ \
+ int32_t oldval; \
+ oldval = atomic_fetchadd_int(addr, -val); \
+ if (oldval < val) { \
+ panic("Counter goes negative"); \
+ } \
+}
+#else
+#define SCTP_SAVE_ATOMIC_DECREMENT(addr, val) \
+{ \
+ int32_t oldval; \
+ oldval = atomic_fetchadd_int(addr, -val); \
+ if (oldval < val) { \
+ *addr = 0; \
+ } \
+}
+#endif