diff options
author | Dave Barach <dave@barachs.net> | 2019-08-22 19:32:49 -0400 |
---|---|---|
committer | Dave Barach <dave@barachs.net> | 2019-08-22 19:33:34 -0400 |
commit | 84a563ae4050cc0389dcd438fbe9ea882f2b8404 (patch) | |
tree | 18b9db5ecbd3cd9480f6f94e237720321c2b877f /src/plugins/dns/dns.h | |
parent | a43c93f8554ad7418e31be3791b3fb71232f60ac (diff) |
dns: fix trivial multi-thread deadlock
Add a simple lock trace mechanism
Type: fix
Ticket: VPP-1752
Signed-off-by: Dave Barach <dave@barachs.net>
Change-Id: Idc82b1ad59adb0f7c185d27ced57e9a4c25ce62f
Diffstat (limited to 'src/plugins/dns/dns.h')
-rw-r--r-- | src/plugins/dns/dns.h | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/plugins/dns/dns.h b/src/plugins/dns/dns.h index 0a3f7a935cb..499c71567d6 100644 --- a/src/plugins/dns/dns.h +++ b/src/plugins/dns/dns.h @@ -99,6 +99,7 @@ typedef struct /** Find cached record by name */ uword *cache_entry_by_name; clib_spinlock_t cache_lock; + int cache_lock_tag; /** enable / disable flag */ int is_enabled; @@ -198,11 +199,14 @@ void vnet_dns_create_resolver_process (dns_main_t * dm); format_function_t format_dns_reply; static inline void -dns_cache_lock (dns_main_t * dm) +dns_cache_lock (dns_main_t * dm, int tag) { if (dm->cache_lock) { + ASSERT (tag); + ASSERT (dm->cache_lock_tag == 0); clib_spinlock_lock (&dm->cache_lock); + dm->cache_lock_tag = tag; } } @@ -211,6 +215,8 @@ dns_cache_unlock (dns_main_t * dm) { if (dm->cache_lock) { + ASSERT (dm->cache_lock_tag); + dm->cache_lock_tag = 0; clib_spinlock_unlock (&dm->cache_lock); } } |