diff options
author | glebius <glebius@FreeBSD.org> | 2014-03-05 21:16:46 +0000 |
---|---|---|
committer | glebius <glebius@FreeBSD.org> | 2014-03-05 21:16:46 +0000 |
commit | dddd70a1124ebe8b0f3bb3c42ee2e5be9372f802 (patch) | |
tree | 805015ca1182895a21c5b2098ea4610ba4d6ef97 /sys/net/route.h | |
parent | 79abbab7d9cf9ccc108ac4b324655e53e15eece5 (diff) | |
download | FreeBSD-src-dddd70a1124ebe8b0f3bb3c42ee2e5be9372f802.zip FreeBSD-src-dddd70a1124ebe8b0f3bb3c42ee2e5be9372f802.tar.gz |
The route code used to mtx_destroy() a locked mutex before rtentry free. Now,
after r262763 it started to return locked mutexes to UMA. To fix that,
conditionally unlock the mutex in the destructor.
Tested by: "Sergey V. Dyatko" <sergey.dyatko@gmail.com>
Diffstat (limited to 'sys/net/route.h')
-rw-r--r-- | sys/net/route.h | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/sys/net/route.h b/sys/net/route.h index 61f3b29..a4d2a1f 100644 --- a/sys/net/route.h +++ b/sys/net/route.h @@ -309,6 +309,10 @@ struct rt_addrinfo { #define RT_UNLOCK(_rt) mtx_unlock(&(_rt)->rt_mtx) #define RT_LOCK_DESTROY(_rt) mtx_destroy(&(_rt)->rt_mtx) #define RT_LOCK_ASSERT(_rt) mtx_assert(&(_rt)->rt_mtx, MA_OWNED) +#define RT_UNLOCK_COND(_rt) do { \ + if (mtx_owned(&(_rt)->rt_mtx)) \ + mtx_unlock(&(_rt)->rt_mtx); \ +} while (0) #define RT_ADDREF(_rt) do { \ RT_LOCK_ASSERT(_rt); \ |