From 84a563ae4050cc0389dcd438fbe9ea882f2b8404 Mon Sep 17 00:00:00 2001 From: Dave Barach Date: Thu, 22 Aug 2019 19:32:49 -0400 Subject: dns: fix trivial multi-thread deadlock Add a simple lock trace mechanism Type: fix Ticket: VPP-1752 Signed-off-by: Dave Barach Change-Id: Idc82b1ad59adb0f7c185d27ced57e9a4c25ce62f --- src/plugins/dns/dns.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'src/plugins/dns/dns.h') 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); } } -- cgit 1.2.3-korg