diff options
| author | Randall Stewart <rrs@FreeBSD.org> | 2009-02-12 18:50:27 +0000 |
|---|---|---|
| committer | Randall Stewart <rrs@FreeBSD.org> | 2009-02-12 18:50:27 +0000 |
| commit | 1ae616bdd1308f9afe4e0cf74f25676d253ecb2e (patch) | |
| tree | 0a67f84736b00a1a9c3cc52daa3f2d44ca072262 /sys/netinet/sctp_os_bsd.h | |
| parent | e29c5f9fe0c5f42402a9a1fac8f2fa84bf5d3ddc (diff) | |
Notes
Diffstat (limited to 'sys/netinet/sctp_os_bsd.h')
| -rw-r--r-- | sys/netinet/sctp_os_bsd.h | 21 |
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 |
