Commit a03f8d4c authored by Simon Kelley's avatar Simon Kelley

Suppress re-entrant calls to dhcp_construct_contexts()

parent c4a09376
...@@ -708,12 +708,20 @@ static int construct_worker(struct in6_addr *local, int prefix, ...@@ -708,12 +708,20 @@ static int construct_worker(struct in6_addr *local, int prefix,
void dhcp_construct_contexts(time_t now) void dhcp_construct_contexts(time_t now)
{ {
static int active = 0;
struct dhcp_context *context, *tmp, **up; struct dhcp_context *context, *tmp, **up;
struct cparam param; struct cparam param;
param.newone = 0; param.newone = 0;
param.newname = 0; param.newname = 0;
param.now = now; 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) for (context = daemon->dhcp6; context; context = context->next)
if (context->flags & CONTEXT_CONSTRUCTED) if (context->flags & CONTEXT_CONSTRUCTED)
context->flags |= CONTEXT_GC; context->flags |= CONTEXT_GC;
...@@ -771,6 +779,8 @@ void dhcp_construct_contexts(time_t now) ...@@ -771,6 +779,8 @@ void dhcp_construct_contexts(time_t now)
/* Not doing DHCP, so no lease system, manage alarms for ra only */ /* Not doing DHCP, so no lease system, manage alarms for ra only */
send_alarm(periodic_ra(now), now); send_alarm(periodic_ra(now), now);
} }
active = 0;
} }
#endif #endif
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment