summaryrefslogtreecommitdiff
path: root/main.c
diff options
context:
space:
mode:
authorGDR! <gdr@gdr.name>2018-02-06 12:57:33 +0100
committerGDR! <gdr@gdr.name>2018-02-06 12:57:33 +0100
commita6e3e443c5b788c7d1b43a1f9118d772a5a18f8d (patch)
treebb9f66301fe3ea629bea7d0ed1cb41414690a2cc /main.c
parentb8c2242cafe33bda19c9774e2584be7508cb35f0 (diff)
Attempt at fixing double-free in issue #50
Diffstat (limited to 'main.c')
-rw-r--r--main.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/main.c b/main.c
index a16c040..2581a20 100644
--- a/main.c
+++ b/main.c
@@ -161,10 +161,31 @@ void tunnel_delete(tunnel *t)
161 free(t); 161 free(t);
162} 162}
163 163
164int tunnel_in_delete_queue(tunnel *t)
165{
166 tunnel_list *element;
167
168 LL_FOREACH(tunnels_to_delete, element)
169 {
170 if(element->tun == t)
171 {
172 return 1;
173 }
174 }
175
176 return 0;
177}
178
164void tunnel_queue_delete(tunnel *t) 179void tunnel_queue_delete(tunnel *t)
165{ 180{
166 tunnel_list *tunnel_list_entry = NULL; 181 tunnel_list *tunnel_list_entry = NULL;
167 182
183 if(tunnel_in_delete_queue(t))
184 {
185 log_printf(L_DEBUG2, "Did not queue deleting tunnel #%d ptr %p - already queued\n", t->connid, t);
186 return;
187 }
188
168 log_printf(L_DEBUG2, "Queued deleting tunnel #%d ptr %p\n", t->connid, t); 189 log_printf(L_DEBUG2, "Queued deleting tunnel #%d ptr %p\n", t->connid, t);
169 190
170 tunnel_list_entry = calloc(sizeof(tunnel_list), 1); 191 tunnel_list_entry = calloc(sizeof(tunnel_list), 1);