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
|
||
|
|