diff options
author | Sam Leffler <sam@FreeBSD.org> | 2003-11-08 23:36:32 +0000 |
---|---|---|
committer | Sam Leffler <sam@FreeBSD.org> | 2003-11-08 23:36:32 +0000 |
commit | 7138d65c3fe802e1ddafb8f02224b0e302ce8b7e (patch) | |
tree | 216d7a328008c2857f9b286342d5087eea1cc6a5 /sys/net/route.h | |
parent | 00bd917263e4a4ae2eb4d37284817a6c2a7f4153 (diff) | |
download | src-7138d65c3fe802e1ddafb8f02224b0e302ce8b7e.tar.gz src-7138d65c3fe802e1ddafb8f02224b0e302ce8b7e.zip |
replace explicit changes to rt_refcnt by RT_ADDREF and RT_REMREF
macros that expand to include assertions when the system is built
with INVARIANTS
Supported by: FreeBSD Foundation
Notes
Notes:
svn path=/head/; revision=122334
Diffstat (limited to 'sys/net/route.h')
-rw-r--r-- | sys/net/route.h | 37 |
1 files changed, 25 insertions, 12 deletions
diff --git a/sys/net/route.h b/sys/net/route.h index 2c60780f77fb..54f706de28e9 100644 --- a/sys/net/route.h +++ b/sys/net/route.h @@ -266,19 +266,32 @@ struct rt_addrinfo { #define RT_LOCK_DESTROY(_rt) mtx_destroy(&(_rt)->rt_mtx) #define RT_LOCK_ASSERT(_rt) mtx_assert(&(_rt)->rt_mtx, MA_OWNED) -#define RTFREE_LOCKED(_rt) do { \ - if ((_rt)->rt_refcnt <= 1) \ - rtfree(_rt); \ - else { \ - (_rt)->rt_refcnt--; \ - RT_UNLOCK(_rt); \ - } \ - /* guard against invalid refs */ \ - _rt = 0; \ +#define RT_ADDREF(_rt) do { \ + RT_LOCK_ASSERT(_rt); \ + KASSERT((_rt)->rt_refcnt >= 0, \ + ("negative refcnt %ld", (_rt)->rt_refcnt)); \ + (_rt)->rt_refcnt++; \ +} while (0); +#define RT_REMREF(_rt) do { \ + RT_LOCK_ASSERT(_rt); \ + KASSERT((_rt)->rt_refcnt > 0, \ + ("bogus refcnt %ld", (_rt)->rt_refcnt)); \ + (_rt)->rt_refcnt--; \ +} while (0); + +#define RTFREE_LOCKED(_rt) do { \ + if ((_rt)->rt_refcnt <= 1) \ + rtfree(_rt); \ + else { \ + RT_REMREF(_rt); \ + RT_UNLOCK(_rt); \ + } \ + /* guard against invalid refs */ \ + _rt = 0; \ } while (0) -#define RTFREE(_rt) do { \ - RT_LOCK(_rt); \ - RTFREE_LOCKED(_rt); \ +#define RTFREE(_rt) do { \ + RT_LOCK(_rt); \ + RTFREE_LOCKED(_rt); \ } while (0) extern struct radix_node_head *rt_tables[AF_MAX+1]; |