]> git.ipfire.org Git - people/ms/dnsmasq.git/commitdiff
Suppress re-entrant calls to dhcp_construct_contexts()
authorSimon Kelley <simon@thekelleys.org.uk>
Thu, 5 Jun 2014 21:38:53 +0000 (22:38 +0100)
committerSimon Kelley <simon@thekelleys.org.uk>
Thu, 5 Jun 2014 21:38:53 +0000 (22:38 +0100)
src/dhcp6.c

index bc48fdddd3de6eaca7f63d4f9e00ba0781ed01a5..0e470cfba3d0edf5e216c21b7d206e4c60cb9455 100644 (file)
@@ -708,12 +708,20 @@ static int construct_worker(struct in6_addr *local, int prefix,
 
 void dhcp_construct_contexts(time_t now)
 { 
+  static int active = 0;
   struct dhcp_context *context, *tmp, **up;
   struct cparam param;
   param.newone = 0;
   param.newname = 0;
   param.now = now;
 
+  /* Various calls that we make may end up calling iface_enumerate(), which can then 
+     call us again, We're NOT re-entrant, so ignore a second invokation. */
+  if (active)
+    return;
+
+  active = 1;
+
   for (context = daemon->dhcp6; context; context = context->next)
     if (context->flags & CONTEXT_CONSTRUCTED)
       context->flags |= CONTEXT_GC;
@@ -771,6 +779,8 @@ void dhcp_construct_contexts(time_t now)
        /* Not doing DHCP, so no lease system, manage alarms for ra only */
        send_alarm(periodic_ra(now), now);
     }
+
+  active = 0;
 }
 
 #endif