62 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From e9db3fdf55cdf3175d96db90313c33f848985960 Mon Sep 17 00:00:00 2001
 | |
| From: Simon Kelley <simon@thekelleys.org.uk>
 | |
| Date: Fri, 4 Dec 2020 18:35:11 +0000
 | |
| Subject: [PATCH] Small cleanups in frec_src datastucture handling.
 | |
| 
 | |
| ---
 | |
|  src/forward.c | 22 +++++++++++++---------
 | |
|  1 file changed, 13 insertions(+), 9 deletions(-)
 | |
| 
 | |
| diff --git a/src/forward.c b/src/forward.c
 | |
| index 25ad8b1..c496f86 100644
 | |
| --- a/src/forward.c
 | |
| +++ b/src/forward.c
 | |
| @@ -364,7 +364,10 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
 | |
|  	  if (!daemon->free_frec_src &&
 | |
|  	      daemon->frec_src_count < daemon->ftabsize &&
 | |
|  	      (daemon->free_frec_src = whine_malloc(sizeof(struct frec_src))))
 | |
| -	    daemon->frec_src_count++;
 | |
| +	    {
 | |
| +	      daemon->frec_src_count++;
 | |
| +	      daemon->free_frec_src->next = NULL;
 | |
| +	    }
 | |
|  	  
 | |
|  	  /* If we've been spammed with many duplicates, just drop the query. */
 | |
|  	  if (daemon->free_frec_src)
 | |
| @@ -401,6 +404,7 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
 | |
|  	  forward->frec_src.orig_id = ntohs(header->id);
 | |
|  	  forward->frec_src.dest = *dst_addr;
 | |
|  	  forward->frec_src.iface = dst_iface;
 | |
| +	  forward->frec_src.next = NULL;
 | |
|  	  forward->new_id = get_id();
 | |
|  	  forward->fd = udpfd;
 | |
|  	  memcpy(forward->hash, hash, HASH_SIZE);
 | |
| @@ -2262,16 +2266,16 @@ void free_rfd(struct randfd *rfd)
 | |
|  
 | |
|  static void free_frec(struct frec *f)
 | |
|  {
 | |
| -  struct frec_src *src, *tmp;
 | |
| -
 | |
| -   /* add back to freelist of not the record builtin to every frec. */
 | |
| -  for (src = f->frec_src.next; src; src = tmp)
 | |
| +  struct frec_src *last;
 | |
| +  
 | |
| +  /* add back to freelist if not the record builtin to every frec. */
 | |
| +  for (last = f->frec_src.next; last && last->next; last = last->next) ;
 | |
| +  if (last)
 | |
|      {
 | |
| -      tmp = src->next;
 | |
| -      src->next = daemon->free_frec_src;
 | |
| -      daemon->free_frec_src = src;
 | |
| +      last->next = daemon->free_frec_src;
 | |
| +      daemon->free_frec_src = f->frec_src.next;
 | |
|      }
 | |
| -  
 | |
| +    
 | |
|    f->frec_src.next = NULL;    
 | |
|    free_rfd(f->rfd4);
 | |
|    f->rfd4 = NULL;
 | |
| -- 
 | |
| 2.26.2
 | |
| 
 |