Browse Source

core: dns - macro wrappers to print more details on dns hash put

Daniel-Constantin Mierla 2 months ago
parent
commit
d79bc9b9b8
2 changed files with 18 additions and 9 deletions
  1. 6 4
      src/core/dns_cache.c
  2. 12 5
      src/core/dns_cache.h

+ 6 - 4
src/core/dns_cache.c

@@ -162,14 +162,15 @@ inline static void dns_destroy_entry_shm_unsafe(struct dns_hash_entry *e)
 
 
 /* dec. the internal refcnt and if 0 deletes the entry */
-void dns_hash_put(struct dns_hash_entry *e)
+void dns_hash_put_entry(
+		struct dns_hash_entry *e, const char *fpath, unsigned int line)
 {
 	if(e != NULL) {
 		if(atomic_dec_and_test(&e->refcnt)) {
 			/* atomic_sub_long(dns_cache_total_used, e->total_size); */
 			dns_destroy_entry(e);
 		} else if(e->next == NULL && e->prev == NULL) {
-			LM_WARN("unlinked item %p\n", e);
+			LM_WARN("unlinked item %p (%s:%u)\n", e, fpath, line);
 		}
 	}
 }
@@ -177,14 +178,15 @@ void dns_hash_put(struct dns_hash_entry *e)
 
 /* same as above but uses dns_destroy_unsafe (assumes shm_lock held -- tm
  *  optimization) */
-void dns_hash_put_shm_unsafe(struct dns_hash_entry *e)
+void dns_hash_put_entry_shm_unsafe(
+		struct dns_hash_entry *e, const char *fpath, unsigned int line)
 {
 	if(e != NULL) {
 		if(atomic_dec_and_test(&e->refcnt)) {
 			/* atomic_sub_long(dns_cache_total_used, e->total_size); */
 			dns_destroy_entry_shm_unsafe(e);
 		} else if(e->next == NULL && e->prev == NULL) {
-			LM_WARN("unlinked item %p\n", e);
+			LM_WARN("unlinked item %p (%s:%u)\n", e, fpath, line);
 		}
 	}
 }

+ 12 - 5
src/core/dns_cache.h

@@ -193,24 +193,31 @@ int init_dns_cache_stats(int iproc_num);
 #endif
 void destroy_dns_cache(void);
 
+void dns_hash_put_entry(
+		struct dns_hash_entry *e, const char *fpath, unsigned int line);
+void dns_hash_put_entry_shm_unsafe(
+		struct dns_hash_entry *e, const char *fpath, unsigned int line);
 
-void dns_hash_put(struct dns_hash_entry *e);
-void dns_hash_put_shm_unsafe(struct dns_hash_entry *e);
+#define dns_hash_put(e) dns_hash_put_entry(e, __FILE__, __LINE__)
+#define dns_hash_put_shm_unsafe(e) \
+	dns_hash_put_entry_shm_unsafe(e, __FILE__, __LINE__)
 
-inline static void dns_srv_handle_put(struct dns_srv_handle *h)
+inline static void dns_srv_handle_put_helper(
+		struct dns_srv_handle *h, const char *fpath, unsigned int line)
 {
 	if(h) {
 		if(h->srv) {
-			dns_hash_put(h->srv);
+			dns_hash_put_entry(h->srv, fpath, line);
 			h->srv = 0;
 		}
 		if(h->a) {
-			dns_hash_put(h->a);
+			dns_hash_put_entry(h->a, fpath, line);
 			h->a = 0;
 		}
 	}
 }
 
+#define dns_srv_handle_put(h) dns_srv_handle_put_helper(h, __FILE__, __LINE__)
 
 /** @brief use it when copying, it manually increases the ref cound */
 inline static void dns_srv_handle_ref(struct dns_srv_handle *h)